1、库的理解
1.1、 什么是库?
所谓库就是程序代码的集合,是共享程序代码的一种方式。
1.2、 库的分类
根据程序代码的开源情况,库可以分为两类
开源库:
源代码是公开的,你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。
闭源库:
不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。本篇重点要讲的便是其中的静态库。
1.3、静态库和动态库的存在形式
静态库:
以".a"或者“.framework”为文件后缀名。
动态库
以".dylib"或者“.framework”为文件后缀名(Xcode7 之后 .tbd 代替了 .dylib)。
1.4、静态库和动态库的使用区别
静态库: 链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。在这里插入图片描述
动态库: 链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。图片描述:
1.5、iOS 设备的CPU架构
模拟器:
4s-5: i386
5s-iPhone X(包活iPhone SE): 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: iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3
注:iPhone 7、iPhone 7 Plus、iPhone 8、iPhone 8 Plus、iPhone X真机到底是什么架构暂时不得而知,但是模拟器是x86_64。
2、如何打包静态库.a文件
1.创建一个新的工程项目(Xcode File-New-Project)
2、在里面实现几个方法类,在这里随意实现了一个继承自NSObject的类,两个UI控件
3、接下来选择需要暴露出来的头文件,右键移动到Public下。
4、配置下工程文件
5、配置完之后可以选择模拟器&真机各运行一遍,在运行后我们找到下面红色箭头生成的.a文件(变为黑色)右键选择show in finder,就可以分别找到模拟器和真机打包的SDK路径了。这里先将任意一个usr里local里include里的xxx.h复制到桌面,一会有用
6、然后可以合并两个.a文件,
打开终端输入
lipo -create /虚拟机路径/Debug-iphonesimulator/libRTTestA.a /真机路径/Debug-iphoneos/libRTTestA.a -output /Users/生成文件路径/Desktop/111/RTTestA.a
按回车,自动生成文件。
7、应用。把生成的RTTestA.a文件和刚才拖出来到桌的三个头文件导入用新创建的应用当中,即可调
取应用
扩展:
打包时,设置支持所有真机机型/模拟机机型架构: Build Active Architecture Only 设为NO。
参考链接:
1、iOS打包静态库(完整篇)