1. framework
1.1 创建一个framework工程
未完 待续
2. .a
2.1 创建一个.a工程
创建之后会默认生成一个和库名一样的文件夹和 类(XCode 7 好像没有生成类 需要自己手动创建)
2.2 添加相关代码
2.3 编译之后会生成.a文件如下图
2.4 别人用我们生成的库 需要头文件 这时我就就需要吧我的的.h文件暴露出去
- 第一种方式:直接把所有需要暴露的头文件copy出去(不推荐)
- 第二种方式:用系统的CopyFile 添加对应的文件夹包含所有的头文件如下图(个人推荐)
- 第三种方式:用系统的header File 生成如下图
2.5 生成模拟器和真机对应的.a文件
由于真机和模拟器架构不一样 所以我们要分别针对模拟器和真机生成不同的.a库
真机生成 在真机下编译 ,模拟器生成在模拟器下编译
最后会生成两个静态库
合并两个静态库 终端命令: lipo -create 真机.a地址 模拟器.a地址 -output 输出.a地址
新建一个工程 ,并导入刚才创建的.a 静态库 在模拟器 IPhone 8上测试可以 ,但是更换到模拟器iPhone 5编译报错
为什么呢?
每一个设备都有自己的CPU架构,每一个静态库也有自己支持的CPU架构
对于iOS 模拟器
- iPhone4s~5 : i386
- iPhone5s~8plus : x86_64
真机 - iPhone 3gs ~ 4s : armv7
- iPhone5~5c: armv7s
- iPhone6~ : arm6
armv6, armv7, armv7s是ARM CPU的不同指令集,原则是向下兼容的。例如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。
查看静态库.a 对处理器架构的支持 lipo -info xxx.a
解决不支持架构–>>Build Active Architecture Only中的Debug如果为YES,就是说只能调试当前活跃的架构,我们当前选中的即是活跃的,所以设置为No即可