我正在尝试在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_ARCHS设置$(ARCH_STANDARD)以用于任何iOS模拟器SDK的调试时,这对我很有用。此外,我还为调试设置了ONLY_ACTIVE_ARCH的YES。

其他回答

将此添加到我的pod文件的末尾修复了错误:

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 i386"
    end
  end
end

将“仅构建活动体系结构”(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 Monterey 12.0.1

在切换到新的M1芯片系统后,几乎每个人都面临着与旧项目和吊舱相同的问题。

“在/Users//Desktop/iOS_app/Pods/iOS/framework/(CLSInternalReport.o)中,为iOS模拟器构建,但链接到为iOS构建的对象文件中,用于体系结构的文件'/Users/y/Desktop/_iOS_app/Pods/iOS/.framework/臂64“

我已经找到了一个非常有效的解决方案。

首先,对于所有建议为您的项目排除arm64的开发人员来说,它会工作。是的,它会编译,但在安装后,当您尝试打开它时,它会显示一个弹出窗口,显示消息“此应用程序的开发人员需要更新它才能使用此版本的iOS”。这是因为根据苹果公司的说法,“在iOS 11及更高版本中,所有应用程序都使用64位架构”,如果您将arm64排除在项目之外,则不会在iOS 11或更高版本上打开应用程序。

因此,与其选择整个项目,不如将模拟器的架构排除在arm64之外。

步骤:在项目文件之上,选择目标>构建设置>体系结构>排除的体系结构。现在添加选择“任何iOS模拟器SDK”并给它一个值arm64。

参考见下图。

Xcode 12中已删除有效体系结构构建设置。如果此生成设置中有值,则它们会导致问题,需要删除。

我能够“清除”VALID_ARCHS构建设置,方法是将其作为用户定义的构建设置(没有值)添加回,运行项目(失败),然后删除VALID_AARCHS构建设置。之后,我可以在模拟器上运行了。

我的体系结构构建设置是标准体系结构。

您可以从“生成设置”中的加号按钮添加用户定义的设置:

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

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

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