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

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


当前回答

仅添加任何iOS模拟器SDK→ x86_64到项目的生成设置→ VALID_ARCHS适用于我。

Xcode版本:12.1(12A7403)

如果您的项目包含一些不支持x86_64的框架。

您可以将这些框架名称(xxx.framework)添加到Target→ 生成设置→ 排除的源文件名→ 调试→ 任何iOS模拟器SDK。然后修改框架搜索路径以删除这些框架的路径以进行调试→ 任何iOS模拟器SDK。

这两种设置可以避免Xcode在模拟器模式下构建和链接这些框架。

其他回答

在我的案例中:

我有四种配置(+DebugQa和ReleaseQa)。Cocoapods用作依赖关系管理器。

对于DebugQa,我在设备和模拟器上收集数据,而在ReleaseQa上只在设备上收集数据。

它有助于在PodsProject中将BuildActiveArchitecture设置为“yes”。

在我们的案例中,这是Jenkins构建中的一个错误:

框架/版本'xxx/Library/Developer/Xcode/DerivedData/xxx cuytrcyjdlfetmavpdonsknoypgk/构建/产品/调试iphoneos/AppsFlyerLib.framework/AppsFryerLib(AFSDKDevice.o),为iOS构建,但在为Mac Catalyst构建的对象文件中链接,文件'xxx/Library/Developer/Xcode/DerivedData/xxx cuytrcyjdlfetmavpdonsknoypgk/Build/Products/Debug-iphoneos/AppsFlyerLib.framework/AppsFlyerLib'用于体系结构arm64

我们用sudo gem更新cocapods修复了它。

这里的问题是Xcode 11中的有效架构。在Xcode 11中打开项目,并将项目、目标和Pods的Valid架构值更改为$(ARCHS_SESTANDARD)。在Xcode 12中重新打开项目并构建。

如果您在Xcode 12中遇到模拟器(而不是真实设备)的问题,是的,您必须删除VALID_ARCHS设置,因为它不再受支持。转到“构建设置”,搜索“VALID_ARCHS”,然后删除用户定义的财产。在你拥有的每一个目标中都做到这一点。

不过,您可能需要在pod文件的底部添加一个脚本,以便使用正确的体系结构和部署目标编译pod:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
     end
  end
end

建议的答案过时/不正确。

您应该首先尝试更新CocoaPods和库/应用程序的依赖项,如果不起作用,请联系您正在使用的任何依赖项的供应商,看看他们是否正在进行更新,以在M1 Mac上添加对arm64模拟器切片的支持。

这里有很多答案标记为正确,建议您将arm64从支持的体系结构列表中排除。这充其量是一个非常临时的解决方法,最坏的情况是它会将此问题传播给库的其他用户。如果您排除arm64模拟器切片,则会对您在模拟器中开发的应用程序产生性能影响(这反过来会导致您在开发惊人创意时,闪亮的新M1套件的电池时间减少)。