“请勿嵌入”,“嵌入并签名”,“未经签名嵌入”。这些是什么?。他们做什么?

Shr*_*hat 10 ios xcode11

Xcode11 Beta的“框架,库和嵌入式内容”部分中有3个新选项可用于添加库。Xcode库部分屏幕截图

谁能解释他们的工作?

agi*_*ult 52

正如@przemyslaw-jablonski 已经说过的,这类似于 XCode 10 中的内容,但只有一个屏幕(我个人喜欢!)。


嵌入

不要嵌入静态框架和库(链接发生在构建时),只嵌入共享的(动态链接发生在运行时,所以它们需要在你的包中)。

file frameworkToLink.framework/frameworkToLink 将返回:

  • current ar archive: 静态库,选择 Do not embed
  • Mach-O dynamically linked: 共享库,选择 Embed

签名(仅当共享/嵌入时)

如果它已经有适当的签名,则不需要(临时不计算在内)。

codesign -dv frameworkToLink.framework 将返回:

  • code object is not signed at alladhoc:选择Embed and sign
  • 其他任何:已经正确签名,选择 Embed Without Signing

  • 至于“codesign”,我发现如果框架使用“adhoc”签名进行签名,仍然需要对其进行签名,否则应用程序无法启动。 (2认同)
  • 这是否也适用于标准框架,例如 **AdSupport.framework**,还是应该将它们设置为“不嵌入”,因为它们已经存在于设备上? (2认同)

Prz*_*ski 14

基本上在 Xcode 10 的项目设置中(点击 .xcodeproj 文件,带有蓝色图标)你有两个面向框架的部分可见 - 嵌入式二进制文件和链接框架和库。现在它们合二为一。

Do Not Embed 选项基本上是将给定的 .framework 链接到项目中。

Embed & Sign并且Embed Without Signing是旧的嵌入选项。

我不完全确定最后两个之间的功能区别是什么,除了框架在组装过程中会或不会签名的事实。如果您想知道链接和嵌入之间的区别,那么在这里您可以找到关于此的 SO 答案。

图片:

Xcode 10

Xcode 11

  • @RBz 否,“可选”状态,用于支持早期版本作为弱依赖项。查看手册:https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html (2认同)

小智 14

完整的故事 神圣斯威夫特

在此输入图像描述

更多细节


yoA*_*ex5 5

Xcode v11。框架、库和嵌入式内容以及具有嵌入与不嵌入的框架和库

在此处输入图片说明

历史

Embedded Binaries, Linked Frameworks and Libraries -> Frameworks, Libraries, and Embedded Content
Run Code Online (Sandbox Code Playgroud)

[Xcode v11 之前的版本。嵌入式二进制文件、链接框架和库]一直存在到General选项卡中的Xcode v11 部分

它是Dependency管理的一部分[关于]

Xcode v11 具有:

  • 应用目标 - Frameworks, Libraries, and Embedded Content
  • 框架或应用程序扩展目标 - Frameworks and Libraries

嵌入

嵌入

它将框架的副本添加到您的最终包中。之后Dynamic linker :dyld加载或运行时尝试使用[About]查找嵌入式框架,如果未找到,则会发生错误[dyld: Library not loaded]@rpath

Embed是 的一面镜子Build Phases -> Embed Frameworks。在这里你可以设置 bundle 的文件夹和Subpath.

不嵌入

Static Linker 在编译时尝试使用以下代码将静态库中的代码复制到可执行目标文件中 Build Settings -> Framework Search Paths

Do Not Embed是 的一面镜子Build Phases -> Link Binary With LibrariesSign是一面镜子Code Sign On Copy

如果你不添加 astatic framework到这个部分,你会得到一个编译错误[No such module]

结果:

  • 静态库
  • 静态框架 - 不要嵌入
  • 动态框架 - 嵌入

*请注意,Embedding优先级高于Mach-O Type[关于]

  • 应用程序Frameworks, Libraries...Embed和框架Mach-OStatic Library- 结果动态框架。
  • 应用程序Frameworks, Libraries...Do Not Embed和框架Mach-ODynamic Library和 - 结果错误dyld: Library not loaded[关于]
App's Embed (Dynamic) -> Framework's Mach-O Static - Dynamic
App's Do Not Embed(Static) -> Framework's Mach-O Dynamic - error
Run Code Online (Sandbox Code Playgroud)

[静态与动态链接器]
[使用链接和嵌入时]
[词汇]


归档时间:

查看次数:

1427 次

最近记录:

6 年,1 月 前