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

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


当前回答

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

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

其他回答

将“仅构建活动体系结构”(Only_Active_ARCH)构建设置设置为yes,xcode要求arm64,因为Silicon MAC体系结构是arm64。

arm64已被添加为Xcode12中的模拟器拱门,以支持Silicon MAC。

/应用程序/Xcode.app/Contents/Developer/Platforms/iPhone模拟器.platform/Developer/SDKs/iPhone模拟器.sdk/SDKSettings.json

Xcode 13.2.1、macOS v12(蒙特雷)、目标iOS 14.0和CocoaPods 1.11.2

在包括LogRocket和/或Plaid时,我也遇到过类似的问题——它们是xcframework,在我的本地上运行良好,但它们不能建立在bitrise上。我尝试了以上所有答案:

不包括ARCHS臂64在Podfile中将ONLY_ACTIVE_ARCH设置为YES将工作空间验证为是在Podfile中将ARCHS[sdk=iphonesimulator*]设置为uname-m

它们都不起作用。

但通过指定目标iOS版本或将其删除,可以:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
      # OR
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
    end
  end
end

节省时间的敬礼。

转到->应用程序->Xcode->右键单击Xcode->单击获取信息->使用rosetta选择打开。

请确保它在你的pod文件中,删除它。config.build_settings['ARCHS[sdk=iphonesimulator*]']=uname-m

[]

如果你的问题没有解决,也可以试试这个

从项目目录中删除所有突出显示的文件,并通过“pod安装”重新安装pod。

请参阅此技术说明:https://developer.apple.com/documentation/technotes/tn3117-resolving-build-errors-for-apple-silicon排除模拟器的臂64应该是一个临时解决方案。

我相信我找到了答案。根据Xcode 12 beta 6发行说明:

“生成设置”编辑器不再包含有效体系结构生成设置(Valid_ARCHS),因此不鼓励使用它。取而代之的是新的“排除体系结构”生成设置(Excluded_ARCHS)。如果项目包含Valid_AARCHS,则该设置将显示在生成设置编辑器的“用户定义”部分中。(15145028)

我能够通过手动编辑项目文件(我无法确定如何使用Xcode从项目文件中删除该项)并删除所有引用VALID_ARCHS的行来解决此问题。之后,我可以很好地为模拟器进行构建。