最近突然相对自己封装的一些UI工具类进行进一步的封装,突然想到了之前做过的静态库封装,今天重新试了下,操作上不是很熟悉,以此为契机,将技术中的点点滴滴记于简书。
一、 创建一个静态库工程。
1. 打开Xcode,点击File\New\Project,选择iOS\Framework and Library\Cocoa Touch Static Library新建一个静态库工程.
将工程命名为APTestSDK。
二、工程配置
Build ActiveArchitecture Only设置成YES;
Architectures按Xcode默认配置,arm64向前兼容;
制作.a静态库,需要要保证兼容性,包括不同iOS设备以及模拟器运行不出错,所以尽量做到最大的兼容性。
ValidArchitectures设置为:armv7|armv7s|arm64|i386|x86_64
三、一个静态库工程由头文件和实现文件组成,编辑之后就组成了库本身。
创建静态库库时,一般是不需要.m实现文件的,选中APTestSDK.m右击选中delete,将其删除。
四、将自己封装好的自定义控件拖入工程。
1. 将功能相关的所有头文件,导入到SDK的头文件中。
2. 选中Generic iOS Device,Comand+B编译工程。(选中Generic iOS Device编译的是真机,选中模拟器编译的就是对应的模拟器静态库。) 若编译成功红色的libAPTestSDK就会变成灰色。
3. 选中libAPTestSDK.a右击Show in Finder。
在下图中你可以看到真机和模拟器对应的静态库和相关文件。
然后我拿到Debug_iphonessimulator里的.a文件,还有和他相关的所有.h文件存放在一个文件夹中。此处我在桌面创建了一个名为MySDK的文件夹。
4. 现在我们那这个文件夹去玩玩了,
你运行之后发现在模拟器上是没啥问题的,当你在真机上运行时就会报错。
哈哈 很明显该库不支持arm64位架构,也就是不支持真机。回想一下就知道我们创建静态库文件时,只添加了模拟器中的静态库,所以接下来就是合并模拟器和真机的静态库。
五、合并静态库。
打开终端,输入一下指令即可。
lipo -create 模拟器中.a的路径 真机中.a的路径 -output /Users/mac/Desktop/libXXX.a
-output后面有一个空格, 其后跟的路径就是你想要存放合并静态库的路径。
六、 把所有的需要封装的.h和最后生成的.a放在一个文件夹里,然后引入到需要的工程即可。