IOS静态库的制作

一、静态库和动态库

1.静态库

后缀是.a和.framework的文件
在使用的时候,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝。

优点:
1.模块化,分工合作
2.避免少量改动经常导致大量的重复编译连接
3.也可以重用,注意不是共享使用

2.动态库

后缀是.dylib 和 .framework(当然现在在导入第三方的时候会找不到.dylib文件,而是用.tbd代替了,.tbd的实质其实就是.dylib)
在使用的时候,由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

优点:
1.可以将最终可执行文件体积缩小
2.多个应用程序共享内存中得同一份库文件,节省资源
3.可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。

当然有一点需要注意的是

项目中如果使用了自制的动态库,不能被上传到AppStore

3.a与.framework的区别

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。

建议用.framework.

二、静态库的制作(.framework)

IOS静态库的制作_第1张图片
1.新建一个framework库
IOS静态库的制作_第2张图片
2.添加需要打包的文件
IOS静态库的制作_第3张图片
3.添加打包到静态库中的.m文件和需要暴露出来的.h文件
IOS静态库的制作_第4张图片
4.分别选择模拟器和真机运行一次
IOS静态库的制作_第5张图片
5.在finder中查看这个文件
IOS静态库的制作_第6张图片
6.这是release下的真机和模拟器的静态库,BHImage是二进制文件,Headders包含的是头文件(字有点丑。。)

到这里其实静态库都已经做好了,但是这个是分开的。真机的就用真机下的,模拟器就用模拟器下的。所以我们需要把它们合并在一起:
在终端输入指令:
  lipo -create 真机下的二进制文件路径(BHImage) 模拟器下的二进制文件路径(BHImage) -output 合并生成输出的文件路径

IOS静态库的制作_第7张图片
Paste_Image.png

最后把合成好的二进制文件放入.framework中。

你可能感兴趣的:(IOS静态库的制作)