1.合并模拟器和真机通用静态库
在Xcode中选择模拟器编译出来的静态库是i386架构的,选择真机编译出来的静态库是armv7架构的。当我们是用这些静态库导入到其他工程里开发的时候很麻烦,其他工程在模拟器下要用需要把i386架构的静态库加到工程里,真机调试的时候又要把armv7 arm64架构的静态库加到工程里。这里介绍个lipo命令可以简单的将两个不同框架的静态库合并起来,这样只需要加一个合并后的静态库到工程里就行了。
假设我们有 libSyncSDK.i386.a (i386架构)和libSyncSDK.arm.a (armv7架构)
我们只需要在terminal中输入以下命令
<span style="font-size:14px;">lipo -create /Users/zyh/Desktop/libSyncSDK.i386.a /Users/zyh/Desktop/libSyncSDK.arm.a -output /Users/zyh/Desktop/libSyncSDK.a</span>
这样生成的libSyncSDK.a就是含有 i386 arm7 arm64 3个架构的,大家可以使用file 命令查看
<span style="font-size:14px;">file libSyncSDK.a</span>
可以放心加到工程中使用了
那么如果是framework形式的要怎么搞呢?
下图是需要拿出来合并的文件位置
将模拟器和真机编译出来的framework中得这个文件拿出来,执行上面描述的操作,然后将合并好的文件在放回到原来的位置 这个framework就支持多个架构了。注意文件名要和合并前的一样
2.拆分多架构支持的静态库
上面说了合并是为了提高开发效率,那么当我们发布app的时候,如果将i386架构打包进入静态库会变大将近一倍(如果一共支持两个架构),那么如果工程使用了多个这类静态库,会导致整个包的大小没必要的增长。我们也可以通过lipo命令为静态库瘦身
还是拿LoginSDK为例子,用file命令查看静态库支持几个架构
发现有i386 armv7 armv7s,实际安装到真机上我们只需要armv7就可以了,我们就用lipo命令将armv7的提取出来
lipo LoginSDK.a -thin armv7 -output arm/LoginSDK.a
这样在arm文件夹中得LoginSDK.a 就是armv7架构了,大家可以用lipo -info 命令查看
瘦身前(左)和 瘦身后(右)的大小比较
转自:https://blog.csdn.net/xiaozhu2001/article/details/40181681