在Xcode中,库链接选项是什么?

21

从Xcode 7开始,Xcode中有一些库/框架链接选项

在项目选项卡中转到应用程序目标

General -> Embedded Binaries
General -> Link Frameworks and Libraries
Build Phases -> Target Dependencies
Build Phases -> Link Binary with Libraries

这里有几种方法:

  • 使用 Alamofire,将显示“Embedded Binaries”选项。

Alamofire.framework 将自动添加为目标依赖项、链接框架和嵌入式框架,并在复制文件的构建阶段中,这是您构建模拟器和设备所需的全部内容。

  • 创建第一个 iOS 框架,将 Library.xcodeproj 添加到工作区,然后选择 Build Phases -> Link Binary with Libraries

  • Carthage 教程:入门指南,将 Library.framework 拖到 General -> Link Frameworks and Libraries。似乎 General -> Link Frameworks and LibrariesBuild Phases -> Link Binary with Libraries 是相同的。

  • Carthage 似乎区分 iOS 和 OS X。

如果您正在为 OS X 构建:在应用程序目标的“General”设置选项卡中,在“Embedded Binaries”部分中,从磁盘上的 Carthage/Build 文件夹中拖放每个要使用的框架。

如果您正在为 iOS、tvOS 或 watchOS 构建:在应用程序目标的“General”设置选项卡中,在“Linked Frameworks and Libraries”部分中,从磁盘上的 Carthage/Build 文件夹中拖放每个要使用的框架。

通过阅读链接库或框架,我们知道这些选项是关于将框架链接到我们的应用程序 / 框架中的。

但它们之间有什么区别?是否有任何一个单一的选项可以涵盖它们所有?

1个回答

25

针对使用Carthage构建的动态框架,我通常采用以下设置:

  • 将库与任何您想要在其中使用它的目标链接。您需要这样做才能在代码中导入框架。
  • 仅在包含应用程序目标中嵌入库。这实际上会将框架复制到应用程序包中。如果不嵌入它,则您的应用程序将在启动时崩溃,因为找不到您的框架。

只有应用程序目标负责嵌入所有框架及其依赖项。这样,如果扩展和应用程序都使用同一个框架,则该框架仅与应用程序一起分发一次。

对于Xcode界面:

  • 将框架拖放到“通用”→“嵌入式二进制文件”中将把框架添加到“链接二进制文件与库”和“嵌入框架”构建阶段中
  • 将框架拖放到“通用”→“已链接的框架和库”中将仅将框架添加到“链接二进制文件与库”构建阶段。

“通用”下的视图似乎是从“构建阶段”选项卡中填充的,因此您可以使用任意一个。

希望这样说得清楚。

编辑:目标依赖项只是需要在当前目标构建之前构建的目标。因此,您的应用程序目标将在此处列出其扩展名,以便在构建应用程序时构建扩展名。


2
简而言之:(1)您需要链接库/框架,否则您甚至无法编译应用程序,(2)您需要嵌入库/框架,否则您可以成功编译应用程序,但应用程序在运行时找不到它。 - Ting Yi Shih
关于Xcode 14的最新进展有什么消息吗? - Thur Brum

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