何时需要将框架和库链接到XCode项目?

25
背景:我开始了一个测试 Swift 项目,以了解如何将 CoreData 实现到我的项目中并扩展我的知识。当然,每当我测试和玩耍代码时,我总是会分心并陷入某些不相关的话题上。这次是关于什么时候需要将框架或库直接链接到 XCode 项目中。

所以这是怎么发生的... 我正在创建 NSManagedObject 的子类,为此我必须在我的 Swift 文件中(编写)import CoreData 。一切似乎都很完美,没有错误、警告等。然而,当我检查我的“项目和目标列表”中连接到我的项目的框架和库时,没有任何一个被列出。我意识到同样适用于当你需要 import UIKit 时。显然,有直接链接这些框架的选项,但好像不需要这样做。

那么,对于我的问题,是否有默认框架不需要显式地链接到 XCode 项目中,或者当我打包项目进行部署时,是否最终需要链接这些框架?如果不是这种情况,从更广泛的角度来看,什么时候需要明确地将框架和库链接到 XCode 项目中呢?

编辑***

如果所有 Apple 框架都已自动链接...那么将它们添加到你的项目中有什么意义呢(请注意,CoreData.framework 最初并未像图片中那样明确链接)。

Project Settings


1
所有的苹果框架都会自动链接,你只需要在你的源代码中写上 'import <framework>' 就可以使用它们。但是对于其他第三方框架,你需要显式地链接和嵌入到你的项目中。 - Shripada
那么,将它们明确链接到您的项目设置中有什么意义呢? - Yonny
1
这些框架是 iPhone 环境的一部分,但其中有很多框架并不是你的项目直接需要的。对于每个你明确使用的库,该库都必须被加载和解释,这会消耗一些系统资源。 - Louis Tur
1个回答

31

没有什么魔法在发生。

这是因为Xcode(LLVM)引入了模块和自动链接功能。
(相关关键字:使用 @import 而不是 #import 和构建设置选项如 启用模块、自动链接框架,默认都设置为YES)。 enter image description here

这两个关键字(模块和自动链接标志选项)的组合会自动查找并添加支持模块的所有相关框架。

从Xcode 5开始(实际上是LLVM和clang编译器前端),在以上默认项目设置下,LLVM内部已经使用模块系统通过@import/#import语句自动链接代码中的任何框架。

一旦这些框架被自动链接,开发者就不再需要把它们放在“已链接的框架和库”中。

因此,苹果系统框架(默认框架)不必显式链接到Xcode项目中。

由于模块在Xcode中可用,所以不需要继续在.pch文件(预编译前缀头文件)中导入所有系统框架列表。 因此,pch设置默认为NO,在幕后不再需要。

据我所知,目前的限制是这些功能只适用于苹果系统框架,也就是说不能应用于用户框架和其他C/C++库。

希望对您有所帮助。


有所帮助,谢谢。 - Leo Feng

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