1. 程式人生 > >lipo命令合併和拆分IOS靜態庫

lipo命令合併和拆分IOS靜態庫

1.合併模擬器和真機通用靜態庫

在Xcode中選擇模擬器編譯出來的靜態庫是i386架構的,選擇真機編譯出來的靜態庫是armv7架構的。當我們是用這些靜態庫匯入到其他工程裡開發的時候很麻煩,其他工程在模擬器下要用需要把i386架構的靜態庫加到工程裡,真機除錯的時候又要把armv7 arm64架構的靜態庫加到工程裡。這裡介紹個lipo命令可以簡單的將兩個不同框架的靜態庫合併起來,這樣只需要加一個合併後的靜態庫到工程裡就行了。

假設我們有 libSyncSDK.i386.a (i386架構)和libSyncSDK.arm.a (armv7架構)

我們只需要在terminal中輸入以下命令

lipo -create /Users/zyh/Desktop/libSyncSDK.i386.a /Users/zyh/Desktop/libSyncSDK.arm.a -output /Users/zyh/Desktop/libSyncSDK.a


這樣生成的libSyncSDK.a就是含有 i386 arm7 arm64 3個架構的,大家可以使用file 命令檢視

file libSyncSDK.a


可以放心加到工程中使用了

那麼如果是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 命令檢視


瘦身前(左)和 瘦身後(右)的大小比較