步驟如下:
-
新建一個文件夾resolveConflict, 將XYPrinter.framework復(fù)制到resolveConflict文件夾內(nèi).XYPrinter.framework內(nèi)容如圖, XYPrinter就是我們要拆分的文件
打開終端, cd到XYPrinter.framework下, 執(zhí)行
$ lipo -info XYPrinter
終端會顯示該庫包含的cpu架構(gòu)
Architectures in the fat file: XYPrinter 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í)行如下命令, 從XYPrinter中拆分出arm64架構(gòu)對應(yīng)的.a庫并命名為XYPrinter_arm64.a
$ lipo XYPrinter -thin arm64 -output XYPrinter_arm64.a
然后同樣的方法修改架構(gòu)名拆分出其他3種cpu架構(gòu)對應(yīng)的.a庫, 拆分完如下圖
$ lipo XYPrinter -thin armv7 -output XYPrinter_armv7.a$ lipo XYPrinter -thin i386 -output XYPrinter_i386.a$ lipo XYPrinter -thin x86_64 -output XYPrinter_x86_64.a
- 將各個.a庫拆分.o文件.最好每個架構(gòu)的.a庫都放到一個獨立的文件夾中拆分, 不然4個架構(gòu)的.a庫拆分后所有的.o文件混在一起就亂了
在XYPrinter.framework根目錄新建文件夾名為arm64, 將XYPrinter_arm64.a拖進該文件夾, 然后cd到arm64文件夾, 執(zhí)行如下命令
$ ar -x XYPrinter_arm64.a
這樣XYPrinter_arm64.a就被拆分成很多的.o文件. 在里面找到造成沖突的.o文件刪除掉. 從第一張圖的錯誤信息可以看出是FscBleCentralModel.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 ../XYPrinter_arm64.a *.o
生成了一個新的arm64架構(gòu)的.a庫. 切換文件夾并重復(fù)該命令將被拆分的其他cpu架構(gòu)的庫重新生成.
- 將所有cpu架構(gòu)的.a庫進行合并. 需要先把XYPrinter文件刪除掉, 因為合并之后的文件最好跟之前名字一樣, 不影響正常使用. 刪掉XYPrinter之后cd到XYPrinter.framework下執(zhí)行如下命令
$ lipo -create -output XYPrinter XYPrinter_arm64.a XYPrinter_armv7.a XYPrinter_i386.a XYPrinter_x86_64.a
這樣就把4個.a庫合并成了名為XYPrinter的文件
- 最后恢復(fù)到第一步圖中的結(jié)構(gòu), 把多余的文件都刪掉就完成了 . 把新的XYPrinter.framework放到項目中, 再次運行就不會沖突了.