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

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


当前回答

在尝试了这个问题的几乎所有答案并阅读了苹果开发者论坛后,我发现只有一个解决方案适合我。

我正在构建一个通用框架,该框架在Swift应用程序中使用。我无法在没有架构错误的情况下构建模拟器。

在我的框架项目中,我在构建阶段有一个通用框架任务。如果你是这样的话:

在构建阶段将以下内容添加到xcodebuild任务中:EXCLUDED_ARCHS=“arm64”

接下来,您必须更改以下项目生成设置:

删除VALID_ARCHS用户定义的设置将ONLY_ACTIVE_ARCH设置为YES***

***如果您正在开发一个框架,并且有一个演示应用程序,则必须在两个项目中都启用此设置。

其他回答

基本上,您必须从项目和Pod项目中排除模拟器架构的arm64。

要做到这一点,请导航到项目的Build Settings,并在Excluded Architecture中添加值为arm64的任何iOS模拟器SDK。

OR

如果您使用的是自定义XCConfig文件,您可以简单地添加此行以排除模拟器架构。EXCLUDED_ARCHS[sdk=iphone模拟器*]=臂64然后您必须对Pod项目进行同样的操作,直到所有Cocoa Pod供应商都完成了在其Podspec中添加以下内容。s.pod_target_xcconfig={'EXCLUDED_ARCHS[sdk=iphonesimulator*]'=>'arm64'}s.user_target_xcconfig={'EXCLUDED_ARCHS[sdk=iphonesimulator*]'=>'arm64'}您可以手动将排除的体系结构添加到Pod项目的构建设置中,但当您使用pod安装。取而代之的是,您可以在Podfile中添加此片段。每次运行pod安装时,它都会写入必要的构建设置。安装后执行|安装程序|安装程序.pods_project.build_configurations.each do | config|config.build_settings[“EXCLUDED_ARCHS[sdk=iphonesimulator*]”]=“arm64”终止终止

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

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

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

请不要忘记在将arm64添加到排除的体系结构后清理构建文件夹。

您可以通过进入菜单>产品>清理构建文件夹或简单地按Command+Shift+K来完成此操作。

我不需要建造模拟器。

对我来说,原因是我在顶部栏的iOS模拟器下选择了一个iPad,在那里你可以选择构建目标-选择一个真实的设备或任何iOS设备(arm64,armv7)解决了这个问题。

1.将arm64添加到构建设置->排除所有目标中的体系结构。

2.关闭Xcode并按照以下步骤打开

右键单击Finder中的Xcode显示简介用Rosetta打开