终端命令:
真机和模拟器上的库文件合并 Framework库合并的是Framework内包含的二进制文件,合并后替换库中的文件,没有.a后缀lipo -create xxx.a(真机)xxx.a(模拟器)-output 新名字.a查看SDK支持的架构lipo -info XXX.a 输出: i386 armv7 x86_64 arm64
注意事项:
1.category的处理
category是项目开发中经常用到的,把category打包成静态库是没有问题的,但是在使用这个静态库时,
调用category中的方法时会发生找不到该方法的运行时错误(selector not recognized),
解决的办法是在使用静态库的工程中配置other linker flags的值为 -ObjC -all_load
2.对图片资源和UI界面xib或nib文件的处理
.a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。
.a文件中无法存放图片或xib文件,很容易理解,但是.framework从本质上说也是一个bundle文件,为什么不把图片或者xib文件直接放在.framework中而单独再创建个bundle文件呢?
那是因为iOS系统不会去扫描.framework下的图片等资源文件,也不会在项目中显示,也就是说即使放在 .framework目录下,系统根本就不会去扫描,因此也无法发现使用
3.Debug和Release
Debug和Release,在我看来主要是针对其面向的目标不同的而进行区分的。
Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。
Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利
Framework 参数配置
点击目标工程>>选择你创建的Framework>>点击工程设置>>做出如下修改
Build Settings>>Dead Code Stripping>>设置为NO
Build Settings>>Strip Debug Symbol During Copy>>全部设置为NO
Build Settings>>Strip Style>>设置为Non-Global Symbols
Build Settings>>Base SDK>>Latest iOS(iOS 选择最新的)
Build Settings>>Link With Standard Libraries>>设置为 NO
Build Settings>>Mach-O Type>>Static Library 对于Mach-O Type有两种情况:
(1)选择 Static Library 打出来的是静态库;
(2)选择 Relocatable Object File 打出来是动态库。
注意⚠️
如果没有用到info.plist文件可以删除,避免在工程中发生冲突