基于这个问题
为什么iOS框架依赖项不需要显式链接到静态库
我读了选定的答案但仍然不明白所以我做了一个示例项目
Github上的测试项目
在测试项目中,我从主要项目和静态库(包括Foundation.framework和UIKit.framework)中删除Link Binary With Libraries和File导航的所有框架,基本上,两个项目链接到0框架.
问题是
在静态库中,它包括MapKit/MapKit.h而没有将Mapkit.framework引用到项目中,为什么它仍在工作?
在主项目中,我从项目中删除UIKit.framework和Foundation.framework,为什么它仍然有效?
既然它现在有效,以后会有什么问题吗?
感谢您的评论.
PS通过工作,我的意思是我可以在模拟器上运行,我可以存档主项目,没有任何错误.
编辑25/07/2014
我尝试使用我正在处理的真实应用程序,它是一样的.
我在文件导航中突出显示了Foundation,UIKit,CoreData和另外10个框架,以及所有这些框架.
取消选中Utilities Panel中的目标 - > Target Membership
建立:通过,运行:通过
我的应用程序的每个功能仍然按预期工作.我不懂.
检查项目构建设置.在LLVM 5.1 - 语言 - 模块下面,您应该看到"自动链接框架"选项.在你的情况下,听起来它设置为'YES',默认值.
在这种情况下,当您引用编译器不知道的类时,它不会产生错误,而是会找出哪个Framework包含该类并将其链接.在您的代码中,它将MKMapView
是触发链接的其他MapKit类之一.
编辑:来自相关的'什么是新的?' 文件:
为代码模块导入的框架启用了自动链接.当源文件包含来自支持模块的框架的标头时,编译器会在目标文件中生成额外信息,以在该框架中自动链接.结果是,在大多数情况下,当您使用支持模块的框架API时,您不需要指定要与目标链接的框架的单独列表.
查看它的另一种方法是编译器足够聪明,#import
可以@import
在适当构建框架时进行变异.所有的系统框架都已经存在.