“不嵌入”,“嵌入和签名”,“嵌入没有签名”。他们是什么? 他们做什么?

在 Xcode11Beta 的“框架、库和嵌入式内容”部分中,我们有3个新的选项用于添加库。

Xcode 库部分截图

enter image description here

有人能解释一下他们是做什么的吗?

41794 次浏览

Basically in Xcode 10 in project settings (upon clicking on .xcodeproj file, with the blue icon) you had two framework-oriented sections visible - Embedded Binaries and Linked Frameworks and Libraries. Now they are merged into one.

Do Not Embed选项基本上就是将给定的框架链接到项目中。

Embed & SignEmbed Without Signing是旧的嵌入选项。

除了框架将在组装期间签名或不签名这一事实之外,我不完全确定最后两者之间的功能差异是什么。如果你想知道链接和嵌入之间的区别,然后 给你你可以找到这个答案。

图片来源:

Xcode 10

Xcode 11

正如@przemyslaw-jablonski 已经指出的那样,这与 XCode 10类似,但只在一个屏幕上(我个人很喜欢!).


嵌入式

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

file frameworkToLink.framework/frameworkToLink将返回:

  • current ar archive: static library, select Do not embed
  • 共享库,选择 Embed

Signing (only if shared/embedded)

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

codesign -dv frameworkToLink.framework将返回:

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

框架、库和嵌入式内容以及嵌入式与不嵌入式框架和库

enter image description here

历史

Embedded Binaries, Linked Frameworks and Libraries -> Frameworks, Libraries, and Embedded Content

[ Xcode pre-v11。嵌入式二进制文件,链接框架和库] 一直存在到 General选项卡的 Xcode v11部分

它是 Dependency管理 < sup > [ About ] 的一部分

Xcode v11拥有:

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

Embedding

嵌入

它将框架的一个副本添加到最后的绑定包中。之后,Dynamic linker :dyld加载或运行时间试图找到 嵌入式框架使用 @rpath< sup > [ About ] 如果没有找到错误将发生 < sup > [ dyld: 库未加载]

EmbedBuild Phases -> Embed Frameworks的镜像。在这里你可以设置包的文件夹和 Subpath

Do Not Embed

在编译时,Static Linker尝试使用 Build Settings -> Framework Search Paths将代码从静态库复制到可执行对象文件中

Do Not EmbedBuild Phases -> Link Binary With Libraries的镜像,SignCode Sign On Copy的镜像

If you do not add a static framework to this section you will get a compile error[No such module]

Result:

  • 静态图书馆
  • 静态框架-不要嵌入
  • 动态框架嵌入式

* 请注意,Embedding的优先级比 Mach-O Type< sup > [ About ]

  • 应用程序的 Frameworks, Libraries...Embed,框架的 Mach-OStatic Library-result 动态框架。
  • Application's Frameworks, Libraries... is Do Not Embed and Framework's Mach-O is Dynamic Library and - result error dyld: Library not loaded< sup > [ About ]
App's Embed (Dynamic) -> Framework's Mach-O Static - Dynamic
App's Do Not Embed(Static) -> Framework's Mach-O Dynamic - error

[静态与动态链接器]
[When use Link and Embed]
[词汇]

完整的霍利斯威夫特故事

enter image description here

更多的 详情