链接库与二进制文件 VS 嵌入框架

86

"在“链接二进制文件”或“嵌入框架”中放置框架的构建阶段有什么区别?"


51
我投票支持重新打开这个问题,它并不宽泛。我自己发现了这个选项,然后就想:“这是什么?我需要它吗?” 它直接比较了XCode中的两个选项,两者都相当奇怪,有点像说:“你想要系鞋带,还是嵌入系鞋带的行为?”这很令人困惑。 - Stephen J
3个回答

44

链接库文件 将框架和库与项目的目标文件链接起来生成二进制文件。您可以将目标源文件与目标的活动SDK中的库或外部库链接。

嵌入式框架 您可以创建一个嵌入式框架,以在应用程序扩展和其包含的应用程序之间共享代码。

-

时间表 (查看此句话) - "如果您的包含应用程序目标链接到一个嵌入式框架,则它必须包括arm64架构,否则将被App Store拒绝。"


如果还有疑问,这个答案对我更有帮助:https://dev59.com/hVwY5IYBdhLWcg3wpJL_#33210611 - abc123

7

iOS 链接(Link) vs 嵌入(Embed)

对于一个应用程序目标:

Xcode 11

  • 静态库
  • 静态框架 - 不嵌入
  • 动态框架 - 嵌入

Xcode 11之前

  • 静态库 - 链接
  • 静态框架 - 链接
  • 动态框架 - 嵌入

如何工作?请参见 [Xcode v11][pre Xcode v11]


5

我一直在查看一些答案,如果有人再次遇到这个问题,我想修改一下我的学习。

无论如何,如果我们想使用框架的任何资源(例如API),我们需要链接它。在这种情况下,我们需要将其添加到“常规目标设置”底部的“已链接的框架和库”部分中。

如果我们嵌入一个库,我们将该库与我们的应用程序捆绑在一起,就像它是一样。这在运行 macOS 的机器上非常方便,因为它们肯定没有特定的第三方库。

那么iOS呢?iOS设备本身没有安装第三方库的可能性,而且Apple对于大型框架(为多个平台构建的库)非常严格。那么库仍然必须被传递?由于仅仅将它们链接起来对于我们应用程序的用户来说是不够的,那么我们还有哪些其他可能性?

这就是一个奇特的构建阶段发挥作用的地方。在项目设置下的“构建阶段”中,有一个链接二进制文件的库部分。此步骤会从大型框架中剥离不必要的部分,并将必要的部分留在捆绑包中,以便在不关心应用程序依赖项的设备上运行。


然而,如果您在应用程序中仅导入AVFoundation,它将会自动链接,就像在苹果自己的AVCam示例中所看到的那样。 - Andy Dent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接