问题一:真机模拟器库无法合并,报错:have the same architectures (arm64) and can't be in the same fat output file
XCode12之前:
编译模拟器静态库支持i386 x86_64两架构
编译真机静态库支持armv7 arm64两架构
使用lipo -create -output命令可以将两个库合并成一个支持模拟器和真机i386 x86_64 armv7 arm64四种架构的胖子库。
XCode12编译的模拟器静态库也支持了arm64,导致出现真机库和模拟器库不能合并的问题。
*解决办法:
1.如果有静态库工程:
2.如果手里只有.a或.framework文件
使用lipo remove命令将模拟器库的arm64架构移除
$ lipo XXX.a -remove arm64 -output XXX.a
问题二:静态库工程编译模拟器库报错ld: in XXX.a(XXXXXXX.o), building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
这个是出在静态库工程中包含其他已经编译好的静态库,且该静态库是真机模拟器合并胖子库(支持四种架构)。
由于这个胖子库只支持真机的arm64但不支持模拟器arm64,所以出现了以上报错。
如果出现上述问题,也是去Build Settings -> Excluded Architectures
里按照这样设置一下,再编译模拟器库就不会报错了。
问题三:项目模拟器运行报错building for iOS Simulator, but linking in object file built for iOS
在Build Settings里User-Defined里是否有个VALID_ARCHS。看看是否有x86_64架构。没有的话填上。