在大型項目的開發(fā)中,我們常常會對一些功能比較固定的模塊進行封裝打包成靜態(tài)庫,以提供給他人使用。但在一般的打包中,得到的framework體積都比較大,這樣會導致最后開發(fā)出來的APP,體積會過大,用戶從App Store下載時,消耗大量的時間和流量,最終影響用戶體驗。
當我們決定要將一個工程打包成framework供他人使用時,通常支持的指令集有i386、x86_64、armv7、arm64,其中armv7和arm64為供真機的指令集,i386和x86_64電腦端的指令集。往往我們打出來的包,是可以供支持電腦端和真機使用的,通常這樣的framework體積會比較大。如果單獨,將包分成真機部分和電腦虛擬機部分,會節(jié)省出很大的一筆空間。
lipo 是一個在 Mac OS X 中處理通用程序(Universal Binaries)的工具。使用lipo,我們可以將framework中的靜態(tài)庫,進行分割。
以下是一些常用指令:
- 查看靜態(tài)庫支持的CPU架構(gòu)
lipo -info libname.a(或者libname.framework/libname)
- 合并靜態(tài)庫
lipo -create 靜態(tài)庫存放路徑1 靜態(tài)庫存放路徑2 ... -output 整合后存放的路徑
lipo -create libname-armv7.a libname-armv7s.a libname-i386.a -output libname.a
framework 合并(例util.framework)
lipo -create arm7/util.framework/util i386/util.framework/util -output util.framework
- 靜態(tài)庫拆分
lipo 靜態(tài)庫源文件路徑 -thin CPU架構(gòu)名稱 -output 拆分后文件存放路徑
架構(gòu)名為armv7/armv7s/arm64等,與lipo -info 輸出的架構(gòu)名一致
lipo libname.a -thin armv7 -output libname-armv7.a
對framework進行瘦身的方案可以如下:
//找到framework中的靜態(tài)文件staticLib
//分別打包出各個平臺的庫
lipo staticLib -thin armv7 -output staticLib_armv7
lipo staticLib -thin arm64 -output staticLib_arm64
lipo staticLib -thin i386 -output staticLib_i386
lipo staticLib -thin x86_64 -output staticLib_x86_64
//分別組合出真機平臺,和電腦虛擬機平臺的包
lipo -create staticLib_armv7 staticLib_arm64 -output staticLib_iphone
lipo -create staticLib_i386 staticLib_x86_64 -output staticLib_iphonesimulate
關鍵代碼可以用Python進行包裝,方便以后調(diào)用。
import os
os.system("lipo staticLib -thin armv7 -output staticLib_armv7")
...
更多優(yōu)質(zhì)文章請關注微信公眾號(iOS優(yōu)文)