lipo源于mac系统要制作兼容powerpc平台和intel平台的程序。lipo 是一个在 Mac OS X 中处理通用程序(Universal Binaries)的工具。现在许多(几乎所有)程序都打上了“Universal”标志,意味着它们同时具有 PowerPC 和 Intel 芯片能够处理的代码。
如果您的产品不会适用于所有平台,你就能够使用 lipo 来给你的程序“瘦身”。比如你想让“便笺”应用程序只包含 Intel(i386)的代码:
cd /Applications
lipo Stickies.app/Contents/MacOS/Stickies -thin i386 -output Stickies.app/Contents/MacOS/Stickies.i386
cd Stickies.app/Contents/MacOS/
rm Stickies
mv Stickies.i386 Stickies
几个命令
1)-info:仅显示出universal file中的包括的架构信息。
2)-detailed_info:打印出fat_header、fat_arch
3)-thin:取出某个架构
4)-create: 创建universal file
编译静态库
iOS Device,编译出来的.a静态库文件是基于arm架构上的,可在真机上运行。选iPhone Simulator,编译出来的静态库文件是基于i386架构的。可在模拟器中运行。我们可以通过lipo命令将这两个文件打包成一个通用的.a文件。
lipo-create静态库存放路径1静态库存放路径2-output整合后存放的路径。
需要先运行 lipo -infolib1.a和lipo -infolib2.a
lipo -create lib1.a lib2.a -output lib.a
lipo -create Release-iphoneos/Helper.framework/Helper Release-iphonesimulator/Helper.framework/Helper -output Helper
使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可。
拆分静态库
合并是为了提高开发效率,那么当我们发布app的时候,如果将i386架构打包进入静态库会变大将近一倍(如果一共支持两个架构),如果工程使用了多个这类静态库,会导致整个包的大小没必要的增长。我们也可以通过lipo命令为静态库瘦身。
用file命令查看静态库支持几个架构:
file xxx.a
实际安装到真机上我们只需要armv7就可以了,我们可以用lipo命令将armv7的提取出来。
lipo xxx.a -thin armv7 -output arm/xxx.a
这样在arm文件夹中得xxx.a 就是armv7架构了,大家可以用lipo -info 命令查看。
lipo -info arm/xxx.a