关于适配XCode 12 跑模拟器编译报错的错误

18,321 阅读2分钟

报错内容:

building for iOS Simulator, but linking in object file built for iOS, xxxx for architecture arm64

项目再迁移到XCode12 的时候跑模拟器遇到了下面这个报错。真机没有问题 image.png

Stack Overflow: xcode-12-building-for-ios-simulator-but-linking-in-object-file-built-for-ios上查大多数都给出了在build settings->excluded architectures 中添加arm64架构的解决方案,但这个对于我们的项目没有用。

XCode 12以前,我们通过Valid Architectures 来配置支持的机型。

(我们项目对5s以前的armv7 armv7s 机型不做机型支持,就没有这两项。可根据具体项目支持机型配置。) image.png

但在XCode12中, Valid Architectures 这一项被移除掉了,改变成了 VALID_ARCHS的栏目。 image.png

解决方案1:

在 VALID_ARCHS 添加上 x86_64的模拟器机型配置 如图: image.png

pod 库如果有设置也对应添加x86_64

改完后clear一下退出xcode再进入。(我的同事因为没有clear,编译还是失败。)

注:在生成上线的时候需要把x84_64去掉即可。

解决方案2:

评论区 @挖掘挖掘 提出来pod 库 注释掉 config.build_settings['VALID_ARCHS'] = 'arm64 arm64e' 这行代码。

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '4.2'
            // 适配XCode12 把下面这行注释掉
            #config.build_settings['VALID_ARCHS'] = 'arm64 arm64e'
            config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
        end
    end
end

并且清空build settings->VALID_ARCHS里面的内容即可。

解决方案3:

评论区君赏 提出了通过设置Exclude Architectures->Debugarm64也可以解决这个问题。 具体的方案可见评论区。

原因:

在XCode11中 x86_64的机型支持是默认添加上的,就算不写也支持,但XCode12的时候 苹果推出了arm主机的Mac, 这使得arm主机的XCode其实就不需要x86_64的默认支持了。 这个时候x86_64也就不是默认添加,需要手动添加上才能在Mac上跑得动模拟器。

感悟:

解决这个问题大概花了大半天时间,跟着Stack Overflow 和 苹果论坛的解决方案找了很多弯路。 可能静下心想想或者试一下自己也能找到问题的原因。

最后分享一下关于适配XCode12 + iOS14 tableView ContentView 层级改变的苹果bug的探究