解决此问题的时候走了很多弯路,在这就不多说了。
解决方案:
在 Target->BuildSetting->Architectures->Excluded Architectures
中
- 点击箭头展开
- 点击右侧加号,添加Any iOS Simulator SDK
-
在Any iOS Simulator SDK 后面添加arm64
这样编译出来的包中就不会包含arm64了。
针对这个问题,详细说明一下:
正常我们打包framework都会需要支持i386、armv7、x86_64、arm64等,因为需要同时满足真机和模拟器的运行。所以我们正常都用将编译后的framework进行合并,命令行如下:
lipo -create 真机文件路径 模拟器文件路径 -output 真机文件路径
文件路径见图:
但是Xcode 12以后模拟器编译生成的framework中也会包含arm64,因此在合并的时候就会出现have the same architectures (arm64) and can't be in the same fat output file
的报错,而我们一开始的方式就能解决这个问题。
此处补充一个查看framework包含内容的命令:
lipo -info framework路径
说到这里就会有别的问题了(可能是跟我换电脑有关),换了个M1的Mac之后编译的模拟器framework只有arm64了,x86_64的没有了。
此时需要用到另一个设置了,依然在Target->BuildSetting
中,搜索VALID_ARCHS
,在这里是描述你编译时需要包含哪些架构的,在后面添加上x86_64即可。
写的可能不是太条理,大致的问题就是这么回事,有不明白的可以留言。
补充目前为止Apple移动设备默认指令集:
- armv6:iPhone2G/3G、iPod 1G/2G
- armv7:iPhone 3GS/4/4s、iPod 3G/4G、iPad 1G/2G/3G、iPad mini
- armv7s:iPhone5、iPhone5c、iPad4
- arm64:iPhone5s及以后、iPad Air、iPad mini2
问题点:
- Xcode 13 新增User-Defined 设置(如下图)Build Setting -> "+" :