这篇文章主要介绍静态库和动态库的区别、支持的平台架构、架构的拆分与合并,以及APP Store上架时可能遇到的问题。
一、存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework
二、使用区别
静态库:链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝
动态库:链接时,不复制,程序运行时由系统加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
三、iOS的架构
模拟器:
CPU架构 | 机型 |
---|---|
i386 | iPhone4s-iPnone5 |
x86_64 | iPhone5s-iPhone X |
真机:
CPU架构 | 机型 |
---|---|
armv7 | iPhone3s-iPhone4s |
armv7s | iPhone5-iPhone5c |
arm64 | iPhone5s-iPhone X |
四、terminal查看静态库支持的框架
lipo -info 静态库名字
lipo -info framework下的二进制文件名字
五、引用动态库上架条件
1、最低支持iOS8.0
2、需要删除i386、x86_64架构包,如果不删除,构建版本是会报错
六、例子
以环信SDK为例,如何进行架构包拆除及生成
cd 到pods文件夹具体三方的.framework目录下,执行以下指令
1.生成armv7架构包
lipo HyphenateLite -thin armv7 -output HyphenateLite_armv7
2.生成armv64架构包
lipoHyphenateLite -thin armv64 -output HyphenateLite_arm64
3.删除原来的架构包,合并armv7和armv64
lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite
4.最后再删除HyphenateLite_armv7和HyphenateLite_arm64