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

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


当前回答

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

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

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

其他回答

为模拟器编译时出现问题:

为iOS模拟器构建,但链接到为iOS构建的对象文件中,用于体系结构arm64

Xcode 12.1, Pod 1.9.1

我的项目结构

主要目标共享扩展名通知服务扩展子模块,自定义框架播客文件

将arm64添加到构建设置->排除所有目标中的体系结构。从VALID_ARCHS中删除arm64,并在所有目标中添加x86_64。在podfile中添加以下代码安装后执行|安装程序|安装程序.pods_project.build_configurations.each do | config|config.build_settings[“EXCLUDED_ARCHS[sdk=iphonesimulator*]”]=“arm64”终止终止更新了pod,删除了podfile.lock,并安装了pod做一个干净的构建。

截至2022年9月19日,所有现有答案都不适用于我。大多数答案建议将arm64从构建设置中排除,完成后,会出现致命错误:找不到模块映射文件

对我有用的是使用Rosseta打开Xcode,

右键单击应用程序文件夹中的Xcode显示简介使用Rosetta检查打开打开Xcode打开的项目清理生成文件夹运行项目

通过使用Rosseta打开Xcode,不需要其他构建设置或配置。

参考文献:

https://medium.com/timeless/starting-react-native-project-in-apple-mac-m1-chip-system-28da0c1f2132https://developer.apple.com/forums/thread/670006

我了解arm64和Xcode 12的问题,我能够通过排除iPhone模拟器的arm64架构或通过为发布方案设置ONLY_ACTIVE_ARCH来解决构建问题。然而,我仍然有问题使用pod repo推送来推送我的框架。

我发现podspec中的设置s.pod_target_xcconfig不会将此设置应用于同一podspec中定义的依赖项。我可以在Cocoapods在验证期间生成的虚拟App项目中看到它。Cocoapods验证正在运行模拟器的发布方案,当一个或多个依赖项不排除arm64或未设置为仅构建活动体系结构时,这将失败。

解决方案可以是强制Cocoapods在验证项目时添加安装后脚本,或者让它构建调试方案,因为调试方案只是构建活动体系结构。

我最终使用Xcode 11发布了我的pod以通过验证。您可以从developer.apple.com下载Xcode 11,将其作为Xcode11.app复制到Applications文件夹,然后使用sudo Xcode select--switch/Applications/Xcode11/app/Contents/developer进行切换。完成后不要忘记切换回来。

在我们的案例中,这是Jenkins构建中的一个错误:

框架/版本'xxx/Library/Developer/Xcode/DerivedData/xxx cuytrcyjdlfetmavpdonsknoypgk/构建/产品/调试iphoneos/AppsFlyerLib.framework/AppsFryerLib(AFSDKDevice.o),为iOS构建,但在为Mac Catalyst构建的对象文件中链接,文件'xxx/Library/Developer/Xcode/DerivedData/xxx cuytrcyjdlfetmavpdonsknoypgk/Build/Products/Debug-iphoneos/AppsFlyerLib.framework/AppsFlyerLib'用于体系结构arm64

我们用sudo gem更新cocapods修复了它。

我不需要建造模拟器。

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