步驟如下:
-
新建一個文件夾resolveConflict, 將TXLiteAVSDK_UGC.framework復(fù)制到resolveConflict文件夾內(nèi).TXLiteAVSDK_UGC.framework內(nèi)容如圖, TXLiteAVSDK_UGC就是我們要拆分的文件
Snip20181205_6.png
- 打開終端, cd到TXLiteAVSDK_UGC.framework下, 執(zhí)行
$ lipo -info TXLiteAVSDK_UGC
終端會顯示該庫包含的cpu架構(gòu)
Architectures in the fat file: TXLiteAVSDK_UGC are: armv7 i386 x86_64 arm64
這里介紹一下各類設(shè)備對應(yīng)的cpu架構(gòu)
模擬器包含的cpu架構(gòu):
iPhone 4s – iPhone 5 : i386
iPhone SE : x86_84
iPhone5s – iPhone 7 Plus : x86_64
真機設(shè)備包含的cpu架構(gòu)
iPhone 3g – iPhone 4s : armv7
iPhone 5 – iPhone 5c : armv7s
iPhone SE : arm64
iPhone 5s – iPhone 7 Plus : arm64
只要支持了armv7就不用再支持armv7s
3 . 執(zhí)行如下命令, 從TXLiteAVSDK_UGC中拆分出arm64架構(gòu)對應(yīng)的.a庫并命名為TXLiteAVSDK_UGC_arm64.a
$ lipo TXLiteAVSDK_UGC -thin arm64 -output TXLiteAVSDK_UGC_arm64.a
然后同樣的方法修改架構(gòu)名拆分出其他3種cpu架構(gòu)對應(yīng)的.a庫, 拆分完如下圖
$ lipo TXLiteAVSDK_UGC -thin armv7 -output TXLiteAVSDK_UGC_armv7.a
$ lipo TXLiteAVSDK_UGC -thin i386 -output TXLiteAVSDK_UGC_i386.a
$ lipo TXLiteAVSDK_UGC -thin x86_64 -output TXLiteAVSDK_UGC_x86_64.a
- 將各個.a庫拆分.o文件.最好每個架構(gòu)的.a庫都放到一個獨立的文件夾中拆分, 不然4個架構(gòu)的.a庫拆分后所有的.o文件混在一起就亂了
在TXLiteAVSDK_UGC.framework根目錄新建文件夾名為arm64, 將TXLiteAVSDK_UGC_arm64.a拖進該文件夾, 然后cd到arm64文件夾, 執(zhí)行如下命令
$ ar -x TXLiteAVSDK_UGC_arm64.a
這樣TXLiteAVSDK_UGC_arm64.a就被拆分成很多的.o文件. 在里面找到造成沖突的.o文件刪除掉. 從第一張圖的錯誤信息可以看出是gmm_gmr.o文件有沖突, 所以就把這個文件刪了
第一張圖中的錯誤信息里顯示的只有arm64架構(gòu)有沖突, 因為我是用真機測試的, 前面也介紹了各類設(shè)備對應(yīng)的cpu架構(gòu), 所以要在模擬器或是其他設(shè)備上也能正常運行, 就需要把其他3個cpu架構(gòu)的.a庫重復(fù)這一步進行拆分并刪除其中沖突的.o文件
- 然后就是把拆分后的文件重新生成.framework靜態(tài)庫. 在arm64文件夾里執(zhí)行如下命令
$ libtool -static -o ../TXLiteAVSDK_UGC_arm64.a *.o
生成了一個新的arm64架構(gòu)的.a庫. 切換文件夾并重復(fù)該命令將被拆分的其他cpu架構(gòu)的庫重新生成.
- 將所有cpu架構(gòu)的.a庫進行合并. 需要先把TXLiteAVSDK_UGC文件刪除掉, 因為合并之后的文件最好跟之前名字一樣, 不影響正常使用. 刪掉TXLiteAVSDK_UGC之后執(zhí)行如下命令
$ lipo -create -output TXLiteAVSDK_UGC TXLiteAVSDK_UGC_arm64.a TXLiteAVSDK_UGC_armv7.a TXLiteAVSDK_UGC_i386.a TXLiteAVSDK_UGC_x86_64.a
這樣就把4個.a庫合并成了名為TXLiteAVSDK_UGC的文件
- 最后恢復(fù)到第一步圖中的結(jié)構(gòu), 把多余的文件都刪掉就完成了 . 把新的TXLiteAVSDK_UGC.framework放到項目中, 再次運行就不會沖突了.