一、环境
Xcode的版本是12.3。
Xcode12把VALID_ARCHS从Architectures挪到了最下面的User-Defined。
二、解决方案
先说解决方案,就是VALID_ARCHS键要么没有,如果有则在debug中必须有x86_64,所以有如下两种解决方式:
第一种解决方式:
直接把User-Defined删除就可以了。
第二种解决方式:
在VALID_ARCHS/Debug的值要有x86_64。
如下图:
三、产生问题的原因:
主要还是因为 M1 cpu的苹果电脑的出现。
Xcode12支持Arm64的虚拟机。
在M1 cpu 的苹果电脑上,在虚拟机上运行应用,应该用Arm64的cpu架构。
在intel cpu的苹果电脑上,在虚拟机上运行应用,应该用x86_64 cpu架构。
上面是造成混乱的原因。实际原因应该还是Xcode在作兼容处理时的bug。
因为VALID_ARCHS/Debug的值中没有x86_64时,按字面意思,在虚拟机上是应该编译不通过的。
但是Xcode11应该是作了特殊处理,没有x86_64这项,在虚拟机上也是可以运行的。
但是Xcode12就是没有作特殊处理了,没有VALID_ARCHS项时没有有问题,如果设置了值,就严格按设的值处理,
结果在虚拟机上就编译不过了。
四、其它需注意的地方
Xcode12中显示的${ARCHS_STANDARD}对应的值是:“arm64,armv7”,这个显示是错的,很容易误导人。
因为在非M1 cpu的苹果电脑上运行虚拟机,应该有x86_64才行。
在工程所在目录执行下面的命令:
xcodebuild -showBuildSettings -scheme <application name> -sdk iphonesimulator | grep ARCHS
执行结果如下:
ARCHS = arm64 x86_64
ARCHS_STANDARD = arm64 x86_64
ARCHS_STANDARD_32_64_BIT = arm64 i386 x86_64
ARCHS_STANDARD_32_BIT = i386
ARCHS_STANDARD_64_BIT = arm64 x86_64
ARCHS_STANDARD_INCLUDING_64_BIT = arm64 x86_64
ARCHS_UNIVERSAL_IPHONE_OS = arm64 i386 x86_64
VALID_ARCHS = arm64 arm64e i386 x86_64
可见:
ARCHS_STANDARD = arm64 x86_64
所以Xcode的显示是错误的。
五、总结
苹果也不知道是怎么搞的,Xcode的质量真的是有问题。而且在发正式版前,beta版都会先发很长时间,结果在Xcdoe12都到12.3了,
还有这么多问题,实在是有点无语。