Xcode12在虚拟机上运行App编译出错的解决方式

一、环境

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了,

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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值