项目中使用到XYPrinter.framework和Printer.framework中的两个.o文件有冲突, 查了资料通过拆分XYPrinter.framework删除其中冲突的.o文件,然后重新生成静态库, 解决了问题.
步骤如下:
新建一个文件夹resolveConflict, 将XYPrinter.framework复制到resolveConflict文件夹内.XYPrinter.framework内容如图, XYPrinter就是我们要拆分的文件
$ lipo -info XYPrinter
终端会显示该库包含的cpu架构
Architectures in the fat file: XYPrinter are: armv7 i386 x86_64 arm64
这里介绍一下各类设备对应的cpu架构
模拟器包含的cpu架构:
iPhone 4s – iPhone 5 : i386
iPhone SE : x86_84
iPhone5s – iPhone 7 Plus : x86_64
真机设备包含的cpu架构
iPhone 3g – iPhone 4s : armv7
iPhone 5 – iPhone 5c : armv7s
iPhone SE : arm64
iPhone 5s – iPhone 7 Plus : arm64
只要支持了armv7就不用再支持armv7s
3 . 执行如下命令, 从XYPrinter中拆分出arm64架构对应的.a库并命名为XYPrinter_arm64.a
$ lipo XYPrinter -thin arm64 -output XYPrinter_arm64.a
然后同样的方法修改架构名拆分出其他3种cpu架构对应的.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
在XYPrinter.framework根目录新建文件夹名为arm64, 将XYPrinter_arm64.a拖进该文件夹, 然后cd到arm64文件夹, 执行如下命令
$ ar -x XYPrinter_arm64.a
这样XYPrinter_arm64.a就被拆分成很多的.o文件. 在里面找到造成冲突的.o文件删除掉. 从第一张图的错误信息可以看出是FscBleCentralModel.o文件有冲突, 所以就把这个文件删了
第一张图中的错误信息里显示的只有arm64架构有冲突, 因为我是用真机测试的, 前面也介绍了各类设备对应的cpu架构, 所以要在模拟器或是其他设备上也能正常运行, 就需要把其他3个cpu架构的.a库重复这一步进行拆分并删除其中冲突的.o文件
$ libtool -static -o ../XYPrinter_arm64.a *.o
生成了一个新的arm64架构的.a库. 切换文件夹并重复该命令将被拆分的其他cpu架构的库重新生成.
$ lipo -create -output XYPrinter XYPrinter_arm64.a XYPrinter_armv7.a XYPrinter_i386.a XYPrinter_x86_64.a
这样就把4个.a库合并成了名为XYPrinter的文件