正如@przemyslaw-jablonski所述,这与Xcode 10中的情况类似,但只有一个屏幕(我个人喜欢这样!)。
不要嵌入静态框架和库(链接发生在构建时),仅嵌入共享框架和库(动态链接发生在运行时,因此它们需要在您的包中)。
file frameworkToLink.framework/frameworkToLink
将返回:
current ar archive
:静态库,请选择Do not embed
Mach-O dynamically linked
:共享库,请选择Embed
如果已经具有正确的签名,则不需要签名(adhoc不计入在内)。
codesign -dv frameworkToLink.framework
将返回:
code object is not signed at all
或adhoc
:请选 Embed and sign
Embed Without Signing
file
的结果是Mach-O通用二进制文件
,那么应该做出什么正确选择? - wzsocodesign
,我发现如果框架使用 adhoc
签名进行签名,仍然需要对其进行签名,否则应用程序将无法启动。 - wzso在Xcode 10中,项目设置(点击具有蓝色图标的.xcodeproj文件)中有两个与框架相关的部分可见 - Embedded Binaries 和 Linked Frameworks and Libraries。现在它们合并为一个部分。
Do Not Embed
选项基本上是将给定的.framework 链接到项目中。
Embed & Sign
和 Embed Without Signing
是旧的嵌入选项。
除了在组装期间是否签署框架之外,我不确定最后两者之间的功能差异。如果您想知道链接和嵌入之间的区别,则可以在这里找到关于此问题的SO答案。
图片:
Xcode v11. 框架、库和嵌入内容以及带嵌入与不带嵌入的框架和库
历史
Embedded Binaries, Linked Frameworks and Libraries -> Frameworks, Libraries, and Embedded Content
[Xcode pre-v11. Embedded Binaries, Linked Frameworks and Libraries]这个选项在Xcode v11之前存在于General
标签中,是依赖管理的一部分[关于]
Xcode v11添加了以下内容:
Frameworks、Libraries和Embedded Content
Frameworks和Libraries
Embed
它将一个框架的副本添加到最终的bundle中。然后,Dynamic linker :dyld
在加载或运行时尝试使用@rpath
[关于]查找嵌入的框架。如果找不到,则会出现错误[dyld: Library not loaded]
Embed
与Build Phases -> Embed Frameworks
是相同的。在此处,您可以设置bundle的文件夹和Subpath
Do Not Embed
Static Linker
在编译时尝试将代码从静态库复制到可执行对象文件中,使用Build Settings -> Framework Search Paths
Do Not Embed
与Build Phases -> Link Binary With Libraries
是相同的。Sign
与Code Sign On Copy
是相同的。
如果您没有将静态框架
添加到此部分,则会出现编译错误[No such module]
结果:
*请注意,嵌入
的优先级高于Mach-O Type
[关于]
Frameworks、Libraries...
是Embed
,而框架的Mach-O
是Static Library
- 结果为动态框架。Frameworks、Libraries...
是Do Not Embed
,而框架的Mach-O
是Dynamic 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