我正在尝试在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)。我在排除的架构中没有任何设置。

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


当前回答

在生成设置中搜索VALID_ARCH,然后按delete。这应该适用于Xcode 12.0.1

其他回答

X代码12.3

我通过将“验证工作区”设置为“是”来解决此问题

我发现了

使用Rosetta(在Finder中查找Xcode>获取信息>使用Rosetta打开)在项目和目标中,仅将“构建活动体系结构”设置为“是”(您可能不需要它,请阅读下面的评论)并将其包含在podfile中:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

为我工作。

我们有Pods和SPM,但它们不能处理其他答案的任何组合。我的同事们都使用Intel MacBook,一切仍然适用于他们!

为模拟器编译时出现问题:

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

Xcode 12.1, Pod 1.9.1

我的项目结构

主要目标共享扩展名通知服务扩展子模块,自定义框架播客文件

将arm64添加到构建设置->排除所有目标中的体系结构。从VALID_ARCHS中删除arm64,并在所有目标中添加x86_64。在podfile中添加以下代码安装后执行|安装程序|安装程序.pods_project.build_configurations.each do | config|config.build_settings[“EXCLUDED_ARCHS[sdk=iphonesimulator*]”]=“arm64”终止终止更新了pod,删除了podfile.lock,并安装了pod做一个干净的构建。

升级到Xcode 12后,我仍然能够为真正的设备构建,但不能为模拟器构建。Podfile构建仅适用于真实设备。

我在Build Settings(构建设置)>User Defined(用户定义)下删除了VALID_ARCHS,它成功了!在发现这个之前,我先捶了一下脑袋。

当我为VALID_ARCHS设置$(ARCH_STANDARD)以用于任何iOS模拟器SDK的调试时,这对我很有用。此外,我还为调试设置了ONLY_ACTIVE_ARCH的YES。