Framework 的基本使用
经过上文分析,如果使用了静态库,需要提交给使用者的包含 头文件(.h) 静态库(.a) 资源文件(.bundle) 三种,十分麻烦,而如果想要使用Framework,只需要在主工程的
- Target.app ———— General ———— Embedded Binaries
里添加.framework 即可, 使用这种方式添加其实是自动执行了以下两步
- 添加.framework 进入 Linked Framework and Libraries
- 在Build Phase里添加了一个名为 Embed Frameworks的 Copy Files操作
其中第二步的Copy Files也可以自己手动设置,选择 Destination 为 Framework 然后点击下文的加号添加即可,如果缺少这个则会在真机调试的时候报这个错误
1 | dyld: Library not loaded:............... |
这是因为 一个App最终真机运行时所有Framework.framework都必须被Embedded进来,不能仅仅依赖最上层的Framework
Framework的头文件系统
Framework还有一个特性是带有头文件的管理系统
- 头文件存在Public/Private/Project的分层系统,仅有Public的头文件对外界可见
- 可以通过一个Umbrella Header的概念进行一次性公开头文件
Umbrella头文件和modulemap
在C语言中最大的痛点,就是 #include 的时候会重复加载代码,所以LLVM提出了使用 import关键字代替include
而如何管理所有的头文件就是利用 modulemap 文件,其语法类似JSON, Apple Framework会自动生成 module.modulemap
1 | //位于 SharedLib.framework/Modules/module.modulemap |
更多可以参考LLVM官方文档