有一句名言:当你知道的东西越多,你才会发现你不懂的东西越多。
现在我有点体会到了,当我去了解静态库,我发现我要学习脚本;当我接触编译C/C++库,我发现我要去了解交叉编译;当我想了解组件化架构,我发现我要去理解cocoapods管理;… 你所处的环境越大,你的视野也就越宽阔。
前面9篇文章介绍了 .a 静态库的制作、.framework 静态库的制作、.a 依赖第三方.a 静态库制作以及 .framework依赖.framework 库的制作。今天补齐最后一篇静态库的情况:依赖.a 的 .framework 静态库、依赖.framework 的 .a 静态库。
这篇讲的是混合,所以.a 和 .framework 都是前面测试的完成的代码
制作依赖.a 的 .framework 静态库
- 静态库.framework 工程MySDK
- 把准备好的 VideoPlayerLib 拉到工程里(包含.h 和 .a)
- 导入头文件使用
[[VideoPlayerLib sharedInstance] openPlayerWindow];
- 编译脚本,终端执行 ./Script.sh
- 把MySDK.framework 导入demo工程中使用
打印出了 openPlayerWindow 这个是.a 库中的log。
得出:编译出的MySDK.framework 已经把依赖的.a 库包含进来了,直接导入就能使用。
制作依赖.framework 的 .a 静态库
- 同样的静态库.a 工程VideoPlayerLib
- 把准备好的 MySDK.framework 拉到工程里
- 导入 #import <MySDK/MySDK.h>
- 引用
[ShowInfo show];
- 编译脚本,终端执行 ./Script.sh
- 把VideoPlayerLib 导入demo工程中使用
编译发现报错:分析是MySDK.framework 的问题
解决办法:把依赖的MySDK.framework 库拉到demo 工程中编译成功
打印出了 ------ShowInfo-------- 这个是MySDK.framework 库中的log。
得出:编译出的libVideoPlayerLib.a 没有 把依赖的MySDK.framework 库包含进来,不能直接导入使用。要把MySDK.framework一起导入才能使用。
总结:静态库.a和.framework 的相互依赖情况下的静态库的制作完成了。
后面会研究的课题范围:组件化、自动编译打包、cocoapod管理