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

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


当前回答

排除arm64后,我总是得到ARCHS[@]:未绑定变量。对我来说,唯一的解决方案是将x86_64添加到此处提到的目标构建设置中。升级到Xcode 12:ld:building For iOS Simulator后出现问题,但链接到dylib build For iOS,架构arm64。您也可以删除之前添加的exclude arm64。

其他回答

轻松修复

右键单击Applications文件夹中的xcode获取信息选择“使用Rosetta打开”

Run.

Xcode获取信息

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

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

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

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

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

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

在我的案例中:Xcode 12

我在EXCLUDED_ARCHS上设置了空值,并设置了ONLY_ACTIVE_ARCH Debug=YES Release=NO Project的Build Setting

我在我的播客文件中包括了这一点:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
        end
    end
end

它在我的模拟器iPhone 8(iOS 12)和iPhone 11 Pro Max(iOS 14)以及我的设备iPhone 7 Plus(iOS 13.4)上运行。

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

Xcode版本:12.1(12A7403)

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

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

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