引言
刚开始接触打包静态库的时候,没有思路,开发中接触到过不少库,一直都是集成调用,并没有深究。现在研究过一段时间,在这里总结一下,有所记录亦有迹可循。
一、库的介绍
- 库是程序代码的一个集合。
- 根据程序的开源情况可以分为开源库和闭源库。开源库的源代码是公开的,比如AFNetworking。闭源库不公开源代码,只留有接口,也就是一般公司会提供的SDK。
- 库还有静态库和动态库。静态库一般是以“.a” 或 “.framework”为结尾的;动态库是以“. dylib”或“.framework”为结尾的。
- 当然也避免不了接触iOS 设备的CPU架构。在这里做个小小的总结吧!需要注意的是在开发中会遇到导入静态库报错的情况,可以从支持真机还是模拟器的静态库以及设备的CPU架构情况进行分析,看是否匹配。
模拟器:
4s-5: i386
5s-6s Plus: x86_64
真机(iOS设备):
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
arm64(注:无armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3
注: 开发中用到了静态库,所以目前对静态库做了研究,之后遇到动态库的情况会继续更新。
二、静态库的建立
- 新建工程。
2.建立一个静态库。
3.在静态库里写方法,生成静态库。一开始新建的静态库.a文件是红色的,运行之后.a文件变成黑色的就表示静态库已经生成,可以右键在show in Finder中查看。如果运行时选择的是模拟器,生成的静态库就对应模拟器可以运行;如果运行时选择的是真机,那么生成的静态库就对应真机可以运行。兼容多种设备运行的话就用到设备的CPU架构了。匹配相对应的架构就可以实现兼容。
4.有的时候会用到同时支持真机和模拟器的静态库,这就需要合并了。
lipo -creat xxx/iphoneos/xxx.a xxx/iphonesimulator/xxx.a -output xxx/new.a
其中,
xxx/iphoneos/xxx.a 是真机库的路径
xxx/iphonesimulator/xxx.a 是模拟器库的路径
xxx/new.a 是两个合并后生成的新的库的路径
5.在终端查看所生成的静态库支持的架构 。
cd+静态库文件路径
lipo -info xxx.a
之后就会在终端输出所对应的架构了。