95

当使用外部框架时,Xcode 现在有一个Embedded BinariesLinked Frameworks部分。

在此处输入图像描述

当您下载外部框架并将其 Finder-> 拖入 Xcode 时,它​​会将框架放入Linked Frameworks and Libraries部分。

当您使用 Carthage 构建库时,建议将其拖入Embedded Binaries部分。

两者似乎都在链接方面工作,因为 API 以任何一种方式都可用,此外,当将框架添加到Embedded Binaries部分时,它也会自动添加到Linked Frameworks and Libraries部分。

那么,谁是对的?迦太基还是互联网的其余部分?为什么有两个选项可以将外部资源包含到 Xcode 项目中?

4

5 回答 5

76
  1. 链接——如果我们使用其中定义的任何 API,我们必须链接一个框架。

  2. 嵌入 - 此过程将确保添加的框架将嵌入应用程序包中,并可能有助于在应用程序和任何扩展包之间共享代码。我们只嵌入了第三方框架,而不是 iOS 提供的那些,因为它们在设备中很容易使用。如果我们正在嵌入,这意味着我们也需要链接到它们,以便 Xcode 可以编译和创建构建。当应用程序在设备中运行时,嵌入式框架将在需要时加载到内存中。

于 2015-10-19T09:09:50.150 回答
16

如果您嵌入二进制文件,它将包含在您的产品中。如果您只链接一个库或框架而不嵌入它,它就不会成为您产品的一部分。

但是,在 iOS8 中,所有 3rd 方框架都需要“嵌入”。即使是在各种程序之间共享的框架也需要“嵌入”到每个程序中。如果它安装在共享位置的设备上,则任何其他使用来自共享位置的相同“嵌入”代码的安装过程都可以重新使用该现有安装。这是特定于 iOS8 的,在 iOS8 之前和 iOS 世界之外,这个答案是不准确的。

于 2015-09-03T12:41:35.347 回答
0

Linking更多关于Linker在编译时或加载/运行时工作的信息。将aLinker 复制Library到目标二进制文件中。由于Framework是自治的Linker,在这种情况下,负责查找和链接系统加载程序路径Dynamic Framework内部或查找和链接捆绑包内部。

Embedding是将二进制文件复制到目标二进制文件的过程。因此,它将位于内部。

在这里阅读更多

于 2019-08-14T19:25:23.473 回答
0

链接- 如果我们使用其中定义的任何 API,我们必须链接框架。

嵌入- 此过程将确保添加的框架将嵌入到应用程序包中,并可能有助于在应用程序和任何扩展包之间共享代码。我们只嵌入了第三方框架,而不是 iOS 提供的那些,因为它们在设备中很容易使用。如果我们正在嵌入,这意味着我们也需要链接到它们,以便 Xcode 可以编译和创建构建。当应用程序在设备中运行时,嵌入式框架将在需要时加载到内存中

.

于 2021-09-25T15:42:53.790 回答
-3

据我了解,嵌入式二进制文件仅包括在 iOS 8 及更高版本上可用的动态框架,否则您只能链接静态框架。

于 2016-03-13T20:12:55.803 回答