iOS静态库的编译与打包

一.概念

1.什么是库

 

就是程序代码的集合,是共享程序代码的一种方式。

 

 

2.库的分类

以上图为例,第三方程序代码的开源情况为标准,库可以分为两类

1)开源库

源代码是公开的,你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。

2)闭源库

源代码不公开,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。

 

3.静态库和动态库的区别

1)静态库链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。

 

2)动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。

 

4.iOS设备架构

1)模拟器
4s-5: i386
5s-7 Plus: x86_64
2)真机(静态库只要支持了armv7,就可以在armv7s的架构上运行)
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 
arm64: iPhone 5s 以及之后所有机型
 
二.静态库编译打包(基于Xcode9.2)
1.".a"文件
1)在Xcode中新建一个静态库项目
 
2)在testLib类中新建一个类方法用于测试
 
 
3)设置公开的接口文件
 
 
4)设置适配所有设备类型架构(否则只能运行在当前选择的特定设备架构上)
 
5)打包运行,需要注意的是运行设备选择的是模拟器,那么编译出来的.a包仅支持模拟器的架构,反之手机依然。最终得到的文件即为编译打包过的静态库文件。
 
 
 
 
2.".framework"文件
1)在Xcode中新建一个.framework静态库项目
 
2)在工程中新建一个测试类,并在类中新建一个类方法用于测试
 
 
3)设置公开的接口文件,需要注意若想公开测试类中的方法,需要将测试类的头文件从Project拖入Public中
 
4)设置适配所有设备类型架构(否则只能运行在当前选择的特定设备架构上)
 
6)设置.framework编译为静态库
 
7)打包运行,需要注意的是运行设备选择的是模拟器,那么编译出来的.framework包仅支持模拟器的架构,反之手机依然。最终得到的文件即为编译打包过的静态库文件。
 
 
 
3.测试编译和生产编译的区别
苹果官方对应用开发的测试环境和生产环境有严格区分,编译静态库也是如此,在打包之前注意调整scheme的设置。debug对应测试环境,release对应生产环境。
 
 
 
posted @ 2018-03-26 15:16  嗷大张  阅读(240)  评论(0编辑  收藏  举报