我正在尝试在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 12中遇到模拟器(而不是真实设备)的问题,是的,您必须删除VALID_ARCHS设置,因为它不再受支持。转到“构建设置”,搜索“VALID_ARCHS”,然后删除用户定义的财产。在你拥有的每一个目标中都做到这一点。

不过,您可能需要在pod文件的底部添加一个脚本,以便使用正确的体系结构和部署目标编译pod:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
     end
  end
end

其他回答

我相信我找到了答案。根据Xcode 12 beta 6发行说明:

“生成设置”编辑器不再包含有效体系结构生成设置(Valid_ARCHS),因此不鼓励使用它。取而代之的是新的“排除体系结构”生成设置(Excluded_ARCHS)。如果项目包含Valid_AARCHS,则该设置将显示在生成设置编辑器的“用户定义”部分中。(15145028)

我能够通过手动编辑项目文件(我无法确定如何使用Xcode从项目文件中删除该项)并删除所有引用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)上运行。

请参阅此技术说明:https://developer.apple.com/documentation/technotes/tn3117-resolving-build-errors-for-apple-silicon排除模拟器的臂64应该是一个临时解决方案。

我在从命令行构建框架时遇到了问题。我的框架依赖于其他缺少对基于ARM的模拟器支持的框架。我最终排除了对基于ARM的模拟器的支持,直到我升级了依赖项。

从命令行构建模拟器框架时,我需要EXCLUDED_ARCHS=arm64标志。

xcodebuild archive -project [project] -scheme [scheme] -destination "generic/platform=iOS Simulator" -archivePath "archives/[scheme]-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES EXCLUDED_ARCHS=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)。删除它后,项目将在没有错误的情况下生成。