【发布时间】:2020-01-01 08:56:15
【问题描述】:
【问题讨论】:
-
我猜“嵌入”的意思是“复制到应用程序包中”。我还猜想“签名”位实际上意味着使用您的凭据“重新签名”。
标签: ios frameworks code-signing xcode11 ios-app-extension
【问题讨论】:
标签: ios frameworks code-signing xcode11 ios-app-extension
完整的故事holyswift
了解更多details
【讨论】:
Xcode v11。框架、库和嵌入式内容以及嵌入与不嵌入的框架和库
历史
Embedded Binaries, Linked Frameworks and Libraries -> Frameworks, Libraries, and Embedded Content
[Xcode pre-v11. Embedded Binaries, Linked Frameworks and Libraries] 一直存在到 General 选项卡中的 Xcode v11 部分
是Dependency管理[About]的一部分
Xcode v11 有:
Frameworks, Libraries, and Embedded Content
Frameworks and Libraries
嵌入
它将框架的副本添加到您的最终包中。之后Dynamic linker :dyld 在加载或运行时 尝试使用@rpath[About] 查找嵌入式框架 如果找不到,则会出现错误[dyld: Library not loaded]
Embed 是Build Phases -> Embed Frameworks 的镜像。在这里你可以设置bundle的文件夹和Subpath。
请勿嵌入
Static Linker 在编译时尝试使用Build Settings -> Framework Search Paths 将代码从静态库复制到可执行目标文件中
Do Not Embed 是Build Phases -> Link Binary With Libraries 的镜像。 Sign 是Code Sign On Copy 的镜像
如果你没有在这个部分添加static framework,你会得到一个编译错误[No such module]
结果:
*请注意Embedding的优先级高于Mach-O Type[About]
Frameworks, Libraries... 是Embed 和框架的Mach-O 是Static Library - 结果动态框架。Frameworks, Libraries... 是Do Not Embed 和框架的Mach-O 是Dynamic Library 和- 结果错误dyld: Library not loaded[About]
App's Embed (Dynamic) -> Framework's Mach-O Static - Dynamic
App's Do Not Embed(Static) -> Framework's Mach-O Dynamic - error
[Static vs Dynamic linker]
[When use Link and Embed]
[Vocabulary]
【讨论】:
基本上在 Xcode 10 的项目设置中(单击 .xcodeproj 文件,带有蓝色图标),您可以看到两个面向框架的部分 - 嵌入式二进制文件和链接框架和库。现在它们合并为一个。
Do Not Embed 选项基本上是将给定的 .framework 链接到项目中。
Embed & Sign 和 Embed Without Signing 是旧的嵌入选项。
我不完全确定最后两者之间的功能区别是什么,除了框架在组装期间会或不会被签名的事实。如果您想知道链接和嵌入之间的区别,那么 here 您可以在此找到 SO 答案。
图片:
【讨论】:
optional status 支持早期版本作为弱依赖。查看手册:developer.apple.com/library/archive/documentation/MacOSX/…
正如@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 all 或adhoc:选择Embed and sign
Embed Without Signing
【讨论】:
file 的结果是Mach-O universal binary,应该怎么选?
codesign,我发现如果框架是用adhoc签名的,还是需要签名的,否则应用程序无法启动。