Xcode11 Beta的“框架,库和嵌入式内容”部分中有3个新选项可用于添加库。Xcode库部分屏幕截图
谁能解释他们的工作?
agi*_*ult 52
正如@przemyslaw-jablonski 已经说过的,这类似于 XCode 10 中的内容,但只有一个屏幕(我个人喜欢!)。
不要嵌入静态框架和库(链接发生在构建时),只嵌入共享的(动态链接发生在运行时,所以它们需要在你的包中)。
file frameworkToLink.framework/frameworkToLink 将返回:
current ar archive: 静态库,选择 Do not embedMach-O dynamically linked: 共享库,选择 Embed如果它已经有适当的签名,则不需要(临时不计算在内)。
codesign -dv frameworkToLink.framework 将返回:
code object is not signed at all或adhoc:选择Embed and signEmbed Without SigningPrz*_*ski 14
基本上在 Xcode 10 的项目设置中(点击 .xcodeproj 文件,带有蓝色图标)你有两个面向框架的部分可见 - 嵌入式二进制文件和链接框架和库。现在它们合二为一。
Do Not Embed 选项基本上是将给定的 .framework 链接到项目中。
Embed & Sign并且Embed Without Signing是旧的嵌入选项。
我不完全确定最后两个之间的功能区别是什么,除了框架在组装过程中会或不会签名的事实。如果您想知道链接和嵌入之间的区别,那么在这里您可以找到关于此的 SO 答案。
图片:
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 ContentFrameworks 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 Libraries。Sign是一面镜子Code Sign On Copy
如果你不添加 astatic framework到这个部分,你会得到一个编译错误[No such module]
结果:
*请注意,Embedding优先级高于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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1427 次 |
| 最近记录: |