自定义三方SDK静态库、.framework
静态库和动态库的存在形式
静态库: .a 和 .framework
动态库: .dylib 和 .framework
静态库和动态库的使用区别:
静态库:链接时,静态库会被完整地复制到可执行文件中,缺点:【被多次使用,就有多份冗余拷贝】
动态库:链接时不复制,程序运行时由系统动态加载到内存里,供程序调用,系统只加载一次!多个程序共享资源,节约内存!
注意:项目中如果使用了自制的动态库,不能被上传到AppStore, 除非你越狱了。
.a 静态库 和 .framework的异同:
共同点: 最终都是转化为二进制文件+.h 文件+其它文件,才能使用。
不同点: .a 本身是一个二进制文件,需要配上.h 和其它资源文件才能使用;.framework 本身已经包含了 .h 和其它资源文件。它包含了所有东西。
静态库的特点
.a + .h ,.a配合上公共的 .h 文件,我们可以获取到.a 中暴露的方法或者成员等,你不能控制加载的方式和时机.
在编译静态库时,需要编译两个版本 -> 真机(arm) | 模拟器(i386)
静态库中的资源包的使用
由于Xcode默认在编译时会把所有的素材文件导入到mainBundle中,为了避免与使用静态库的程序冲突。
在静态库中如果要使用图片素材,会利用bundle的手段
1> 建立bundle,并且向其中添加图片
2> 创建一个类方法,返回图片
3> 编译
4> 调用方如果需要使用,需要导入 .h + .a + XXX.bundle
制作.a静态库步骤:
1.创建一个静态库工程
![](https://img.haomeiwen.com/i1883751/ec53e3397be89daa.png)
![](https://img.haomeiwen.com/i1883751/816810c2081df09d.png)
2.倒入已经创建好的文件
我把自动生成的文件删除了,因为那个并没什么卵用
![](https://img.haomeiwen.com/i1883751/ad9531df9affc24d.png)
根据我的步骤添加项目
![](https://img.haomeiwen.com/i1883751/e3dcd9f2ee6799ac.png)
接下来会多出这样一个头文件夹
![](https://img.haomeiwen.com/i1883751/15a3ee1dc48d9851.png)
暴漏.h头文件
![](https://img.haomeiwen.com/i1883751/031e55c4a9b8f6dc.png)
默认是加入到了Project文件夹,手动拖到Public里就好了
![](https://img.haomeiwen.com/i1883751/5727855106d44017.png)
![](https://img.haomeiwen.com/i1883751/4e2d5ab3852c9cc7.png)
静态库分真机和 模拟版本的
![](https://img.haomeiwen.com/i1883751/2d7d343f1c8df0d4.png)
真机版本analyze一下
![](https://img.haomeiwen.com/i1883751/da036871ff564632.png)
Product文件夹下的就由红色变为黑色了 证明真机版本已经生成成功了
![](https://img.haomeiwen.com/i1883751/8917aea1af506b18.png)
![](https://img.haomeiwen.com/i1883751/e233bde8ae59f5ee.png)
![](https://img.haomeiwen.com/i1883751/c137c5c8e96f5f0e.png)
模拟器版本的和真机的步骤一样,我就不赘述了
![](https://img.haomeiwen.com/i1883751/c45ce990a14b5e55.png)
合并真机和模拟器版本
![](https://img.haomeiwen.com/i1883751/1fa34b1d90327e79.png)
使用命令行lipo -create合并
![](https://img.haomeiwen.com/i1883751/abc8ae5bddcb816a.png)
如果你的类里没有图片、xib和其他资源那可以到此为止了,如果有,就需要进行下面的操作,生成bundle文件夹
未完待续......