集成code-push。ios MAMapKit和code-push集成的zip库有符号表冲突,已经去掉了,但是需要本地手动替换一下 ios/MAMapKit 到 ios/Pods/AMap3DMap/MAMapKit.framework/MAMapKit
duplicate symbol _aes_encrypt_key128 in:
/Users/scj/Desktop/woaiyou/ios/Pods/AMap3DMap/MAMapKit.framework/MAMapKit(MAMapKit-arm64-master.o)
/Users/scj/Library/Developer/Xcode/DerivedData/woaiyou-egifmpznbeewjcffcuomxkgfrjcl/Build/Products/Debug-iphoneos/SSZipArchive/libSSZipArchive.a(aeskey.o)
duplicate symbol _aes_decrypt_key128 in:
/Users/scj/Desktop/woaiyou/ios/Pods/AMap3DMap/MAMapKit.framework/MAMapKit(MAMapKit-arm64-master.o)
/Users/scj/Library/Developer/Xcode/DerivedData/woaiyou-egifmpznbeewjcffcuomxkgfrjcl/Build/Products/Debug-iphoneos/SSZipArchive/libSSZipArchive.a(aeskey.o)
ld: 2 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原因:MAMapKit里有文件冲突
解决: 修改MAMapKit里的文件
内容如下:
解决iOS第三方SDK与本地静态库之间重复的symbols问题
之前发表过一个第三方SDK之间重复symbols的问题,这次其中一个冲突对象换成了本地函数,因为引入的第三方(不用看,高德地图就是你!)封装时没有将其特殊符号封装起来,导致链接时产生符号重复,如下图所示:
这里有两个重复的symbols,分别是_unz_copyright和_zip_copyright,解决方法好明显不能动本地的链接文件(动了也没用,每次编译还是会自动生成),所以只好从MAMapKit中下手,方法如下:
1.MAMapKit.framework中的MAMapKit拷贝到桌面,然后打开终端并用指令”cd desktop”切换到桌面,如下图:
先用lipo -info MAMapKit指令看看MAMapKit有什么类型的包,操作如下:
这是一个fat file,包含类型armv7,i386,x85_64和arm64这4种类型的文件,再结合本文第一张报错图,可以发现重复的只是arm64这个类型的文件,故只需分离出arm64文件即可。
使用指令 lipo -thin arm64 MAMapKit -output MAMapKit.arm64可以从MAMapKit中拷贝出类型为arm64的文件,命名为MAMapKit.arm64,如下图:
再看看桌面可以发现多了个symbols文件
打开如下:
又因为本次除了_zip_copyright命令外,还有一个_unz_copyright命令的冲突,故直接在symbols文件中添加_unz_copyright指令如下图
先将原来的15.8M大小的MAMapKit.arm64移走
最后将删除了重复符号的文件和原来的另外两个文件合并,命令是ar -r MAMapKit.arm64 MAMapKit-arm64-master.o.strip Pods-MAMapKit-dummy.o
可以看到新生成的MAMapKit.arm64大小为15.6M,说明删除了重复符号后瘦身了些许
最后再将新生成的MAMapKit.arm64替换了原来MAMapKit中arm64类型的文件,指令为lipo MAMapKit -replace arm64 MAMapKit.arm64 -output MAMapKitTest如下图:可以看到新生成的MAMapKitTest文件也比原来的MAMapKit小了0.2M的大小,说明重复部分已删除。
最后将MAMapKitTest改名为MAMapKit,并替换MAMapKit.framework中的MAMapKit即可引入工程