我正在尝试在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 11中的有效架构。在Xcode 11中打开项目,并将项目、目标和Pods的Valid架构值更改为$(ARCHS_SESTANDARD)。在Xcode 12中重新打开项目并构建。

其他回答

我也遇到了通过迦太基安装的特定库的相同问题。对于那些正在使用迦太基的人来说,由于迦太基并没有现成的Xcode 12,本文档将指导您找到一种适用于大多数情况的解决方法。很快,Carthage构建了胖框架,这意味着该框架包含所有受支持架构的二进制文件。在引入Apple Silicon之前,它都工作得很好,但现在出现了冲突,因为存在重复的架构(arm64用于设备,arm64用于模拟器)。这意味着迦太基无法将特定于架构的框架链接到单个胖框架。

你可以按照这里的说明操作。迦太基XCODE 12

然后配置迦太基。在构建设置中将arm64置于“排除的体系结构”中。

尝试使用模拟器运行项目。模拟器应运行无任何错误。

我在模拟器/SwiftUI预览中遇到了同样的问题,并出现以下警告:

ld:警告:忽略文件Pods//X.xcframework/ios-arm64_armv7/X.xcframework/X,文件中缺少所需的体系结构x86_64忽略文件Pods//X.xcframework/ios-arm64_armv7/X.xcframework/X(2个切片)

我在项目设置的框架搜索路径中有递归路径$(SRCROOT)。删除它后,项目将在没有错误的情况下生成。

在切换到Macbook Pro M1 App Silicon后,我也遇到了同样的错误。对我有效的解决方案:

删除Podfile.lock运行pod安装就是这样。

在尝试并搜索了不同的解决方案后,我认为最安全的方法是在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(见附件)将活动方案(在项目名称旁边的工具栏上)设置为任何iOS模拟器从产品菜单中清除Build文件夹并生成。