一.概念
1.什么是库
就是程序代码的集合,是共享程序代码的一种方式。
2.库的分类
以上图为例,第三方程序代码的开源情况为标准,库可以分为两类
1)开源库
源代码是公开的,你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。
2)闭源库
源代码不公开,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。
3.静态库和动态库的区别
1)静态库链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
2)动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。
4.iOS设备架构
4s-5: i386
5s-7 Plus: x86_64
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 以及之后所有机型
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c
arm64: iPhone 5s 以及之后所有机型
二.静态库编译打包(基于Xcode9.2)
1.".a"文件
1)在Xcode中新建一个静态库项目
![](https://i-blog.csdnimg.cn/blog_migrate/6f7061f0491b69a6c306c642458cae10.png)
2)在testLib类中新建一个类方法用于测试
![](https://i-blog.csdnimg.cn/blog_migrate/bff5574764827537e9a579f250c27d5d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a9238a687112db019eee0a83fb29d1b4.png)
3)设置公开的接口文件
![](https://i-blog.csdnimg.cn/blog_migrate/8ef8e4bb1117b30bf7ee2e6c607ce123.png)
4)设置适配所有设备类型架构(否则只能运行在当前选择的特定设备架构上)
![](https://i-blog.csdnimg.cn/blog_migrate/70098c885fe75eaee2cf377044a5fc90.png)
5)打包运行,需要注意的是运行设备选择的是模拟器,那么编译出来的.a包仅支持模拟器的架构,反之手机依然。最终得到的文件即为编译打包过的静态库文件。
![](https://i-blog.csdnimg.cn/blog_migrate/eaedea4c2bcdfe126828903316782caa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a4bfe2264cbe263e180ad0d9f60ea64.png)
![](https://i-blog.csdnimg.cn/blog_migrate/33565b950e5a4075c2ddda6344d9a2bd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e4ce67e62b194deff2fb10b9de824472.png)
2.".framework"文件
1)在Xcode中新建一个.framework静态库项目
![](https://i-blog.csdnimg.cn/blog_migrate/72a35d75a925944f48bb30b347de11fc.png)
2)在工程中新建一个测试类,并在类中新建一个类方法用于测试
![](https://i-blog.csdnimg.cn/blog_migrate/0d0a35efe58d8b4e110445f781249a76.png)
![](https://i-blog.csdnimg.cn/blog_migrate/331affd86b053cfbcd22eccf28841442.png)
3)设置公开的接口文件,需要注意若想公开测试类中的方法,需要将测试类的头文件从Project拖入Public中
![](https://i-blog.csdnimg.cn/blog_migrate/d62914b4bcfabb2b46666c704c64e66d.png)
4)设置适配所有设备类型架构(否则只能运行在当前选择的特定设备架构上)
![](https://i-blog.csdnimg.cn/blog_migrate/86fc08ff7522ccb8e5b21fd0877dd9b7.png)
6)设置.framework编译为静态库
![](https://i-blog.csdnimg.cn/blog_migrate/edcce5e7214d999acfd0fc39615eae06.png)
7)打包运行,需要注意的是运行设备选择的是模拟器,那么编译出来的.framework包仅支持模拟器的架构,反之手机依然。最终得到的文件即为编译打包过的静态库文件。
![](https://i-blog.csdnimg.cn/blog_migrate/b79e221559dcace36926a9b014329c61.png)
![](https://i-blog.csdnimg.cn/blog_migrate/86808c9b119d65fad97204615d780998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/65928d10d8410840fa5c619001aced68.png)
3.测试编译和生产编译的区别
苹果官方对应用开发的测试环境和生产环境有严格区分,编译静态库也是如此,在打包之前注意调整scheme的设置。debug对应测试环境,release对应生产环境。
![](https://i-blog.csdnimg.cn/blog_migrate/c16b7bfce8c1e17b9150572ee81059b0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/280f9efa7cdfca7a11a32b23125a3d11.png)