一、环境

Xcode的版本是12.3。
Xcode12把VALID_ARCHS从Architectures挪到了最下面的User-Defined。

二、解决方案

先说解决方案,就是VALID_ARCHS键要么没有,如果有则在debug中必须有x86_64,所以有如下两种解决方式:

第一种解决方式:
直接把User-Defined删除就可以了。

第二种解决方式:
在VALID_ARCHS/Debug的值要有x86_64。
如下图:

VALID_ARCHS

 

三、产生问题的原因:


主要还是因为 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了,

还有这么多问题,实在是有点无语。

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐