iOS 开发中经常使用到第三方 SDK,经常是打包成 .a 文件,我们称之为静态库,所以自然也就有了动态库.
静态库 一般以 .a 或 .framework 结尾 动态库 以.dylib 和 .framework结尾. 静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存.但项目中如果使用了自制的动态库,不能被上传到 AppStore.苹果只能使用其提供的动态库.
如何制作静态库?
1. 创建一个工程
2.新创建工程
3. 删除系统创建的 staticLibTest.h 和 staticLibTest.m 文件,导入自己想要打包的文件. eg: YAdchiveTest1.h
4.可以看到此时的 libStaticLibTest.a 文件是红色的, 选择 IOS Device , command + B 编译.
5.编译完成 libStaticLibTest.a 文件 由红色变为色.此时说明真机版的 .a 文件打包完成. 打包之前可在如下图位置选择需要暴露出来的头文件.
6. 生成模拟器运行的 .a 文件.选择模拟器. command + B 编译.此时可生成模拟器对应的 .a 文件. 注意: 运行在哪个模拟器上生成的 .a 文件就只能运行在其对应的 cpu 架构上.
cpu 架构 : iPhone 4s 之前: i386 5 之后是 x86_64. 要想生成通用的 .a 文件,如下图设置,把 YES --> NO. command + B 运行.
7. 右键 工程下的 Products 文件夹下的 .a 文件 --> show inFinder.则可以看到刚才编译的两个文件. Debug-iphoneos 为真机的, Debug-iphonesimulator 为模拟器的.
8. 打开终端. 进入到 Debug-iphoneos 的上级目录,cd xxxx .进入到文件夹后 输入 : lipo -info + .a文件路径.即可查看对应.a 文件所支持的 cpu 架构. 如下图.
9. 为了在模拟器和真机上同一个 .a 文件都可以运行,避免真机和模拟器导入两个.a 文件,可以将模拟器和真机的两个 .a 文件合为一个文件.
终端键入命令: lipo -create 真机.a绝对路径 模拟器.a 绝对路径 -output/Users/电脑名/Desktop/xxxx.a 合成文件存放桌面
10. 测试 new 一个新工程,导入 .a 以及生成 .a 是的文件中的 .h 文件
11. 在 appDelegate 中运行如下
至此,一个静态库的基本制作就完成了.