基于这个问题
Why don't iOS framework dependencies need to be explicitly linked to a static library
我阅读了所选答案但仍然不明白所以我做了一个示例项目
在测试项目中,我从主项目和静态库(包括Foundation.framework和UIKit)中删除 Link Binary With Libraries 和文件导航的所有框架。基本上,两个项目都链接到0框架。
问题是
感谢您的评论。
P.S。通过工作,我的意思是我可以在模拟器上运行,我可以存档主项目而不会出现任何错误。
编辑25/07/2014
我尝试使用我正在处理的真实应用,但它是一样的。
我的应用的每项功能仍然按预期工作。我不明白。
答案 0 :(得分:27)
检查项目构建设置。在 LLVM 5.1 - 语言 - 模块下,您应该看到“自动链接框架”选项。在你的情况下,它听起来像是'YES',默认。
在这种情况下,当您引用编译器不知道的类时,它不会产生错误,而是会找出哪个Framework包含该类并将其链接。在您的代码中,它将是MKMapView
或触发链接的其他MapKit类之一。
编辑:来自相关的'What's New?' document:
为代码模块导入的框架启用了自动链接。什么时候 源文件包含来自支持的框架的标头 模块,编译器在目标文件中生成额外信息 在该框架中自动链接。结果是,在大多数情况下 在这种情况下,您不需要指定单独的框架列表 在使用支持的框架API时与目标链接 模块。
另一种看待它的方法是,当框架已经适当构建时,编译器足够聪明,可以将#import
变为@import
。所有系统框架都是。
答案 1 :(得分:0)
要详细说明@Tommy的答案,支持模块的框架 满足以下两个条件:
在Build Settings
下> Packaging
Define Modules
设置为YES
Module Map File
存在。因此,如果您确定代码中使用的框架是模块化的,则可以选择不在链接阶段显式添加它,因为只要在项目文件中它就会自动添加,在Apple Clang - Language - Modules
下,选项Link Frameworks Automatically
设置为YES
。