我正在尝试在Xcode 12(beta 5)中构建一个大型(正在开发Xcode 11!)项目,为iOS 14做准备。代码库以前是Objective-C中的,但现在它同时包含Objective-C和Swift,并使用Objective-C或Swift的pod。

我已经推出了支持Xcode 12的CocoaPods新测试版(目前为1.10.0.beta 2)。

Pod安装成功。当我进行构建时,在pod框架上出现以下错误:

为iOS模拟器构建,但链接到为iOS构建的对象文件中,用于体系结构arm64

以及可能的错误:

无法加载目标“arm64-apple-ios11.0”的标准库

当我在框架上运行lipo-info时,它有:armv7s armv7 i386 x86_64 arm64。

此前,该项目的有效架构设置为:armv7、armv7s和arm64。

在Xcode 12中,根据苹果的文档,该设置将消失。架构设置为$(ARCH_STANDARD)。我在排除的架构中没有任何设置。

这里可能发生了什么?我还没能用一个更简单的项目重现这一点。


当前回答

在下图中,在排除的体系结构中→ 在调试和释放中点击+按钮→ 在调试和发布中。

其他回答

在尝试并搜索了不同的解决方案后,我认为最安全的方法是在Podfile末尾添加以下代码

post_install do |pi|
   pi.pods_project.targets.each do |t|
       t.build_configurations.each do |bc|
          bc.build_settings['ARCHS[sdk=iphonesimulator*]'] =  `uname -m`
       end
   end
end

这样,您只能将iOS模拟器的编译器架构覆盖为当前的cpu架构。与其他解决方案相比,该解决方案也适用于使用Apple Silicon的计算机。

将“生成配置”切换回“调试”模式,或为“调试”和“发布”模式启用“仅生成活动体系结构”。

原因是您的库/框架不支持新的模拟器架构ARM64(在Mac上运行,带有Apple硅处理器)。

在尝试了这个问题的几乎所有答案并阅读了苹果开发者论坛后,我发现只有一个解决方案适合我。

我正在构建一个通用框架,该框架在Swift应用程序中使用。我无法在没有架构错误的情况下构建模拟器。

在我的框架项目中,我在构建阶段有一个通用框架任务。如果你是这样的话:

在构建阶段将以下内容添加到xcodebuild任务中:EXCLUDED_ARCHS=“arm64”

接下来,您必须更改以下项目生成设置:

删除VALID_ARCHS用户定义的设置将ONLY_ACTIVE_ARCH设置为YES***

***如果您正在开发一个框架,并且有一个演示应用程序,则必须在两个项目中都启用此设置。

在下图中,在排除的体系结构中→ 在调试和释放中点击+按钮→ 在调试和发布中。

我找到了解决方案!SwiftUI预览无法使用Firebase

如果您将模拟器的排除架构设置为arm64,它将编译。