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

时间:2019-08-28 07:35:26

标签: ios xcode11

我们在Xcode11 Beta的“框架,库和嵌入式内容”部分中提供了3个新选项,用于添加库。Xcode Libraries section screenshot

任何人都可以解释他们的工作吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

除了在组装过程中是否会签署框架这一事实外,我不确定其余两个之间的功能区别是什么。如果您想知道链接和嵌入之间的区别,那么here可以找到关于此的答案。

图片:

XCode 10

XCode 11

答案 1 :(得分:3)

@ przemyslaw-jablonski已经说过,这与XCode 10中的类似,但是仅在一个屏幕上(我个人喜欢!)。

如果您想知道是否需要将其嵌入到应用程序中:请勿嵌入静态框架和库(链接在构建时发生),而仅嵌入共享的框架和库(动态链接在构建时发生)运行时间,因此它们必须位于您的捆绑包中)。在命令行中调用file frameworkToLink.framework/frameworkToLink会让您知道它是静态库(当前ar存档)还是共享库( Mach-O动态链接的共享库)。

如果您想知道是否需要签名:如果尚未签名,则无需这样做,您可以通过以下方法调用codesign -dv frameworkToLink.framework命令行。

答案 2 :(得分:1)

它是Dependency管理[About]

的一部分

[Pre Xcode v11 Link Binary and Embed binary]

Xcode v11具有Frameworks, Libraries, and Embedded Content

嵌入

Do Not Embed

Static Linker在编译时尝试使用Build Settings -> Framework Search Paths

将代码从静态库复制到可执行对象文件中

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

的镜像

如果您未在此部分添加static framework,则会出现编译错误[No such module]

Embed

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

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

结果:

  • 静态库
  • 静态框架-请勿嵌入
  • 动态框架-嵌入

[When use Link and Embed]

[Vocabulary]