Xcode 为 iOS 模拟器构建,但链接到为 iOS、体系结构 'arm64' 构建的目标文件

Xcode building for iOS Simulator, but linking in an object file built for iOS, for architecture 'arm64'

我正在尝试在 Xcode 12 (beta 5) 中构建一个大型项目(并致力于 Xcode 11!),为 iOS 14 做准备。代码库是以前在 Objective-C 中,但现在它包含 Objective-C 和 Swift,并使用 pods 即 Objective-C and/or Swift 作为嗯。

我已经推出 CocoaPods 的新测试版,支持 Xcode 12(当前为 1.10。0.beta 2)。

Pod 安装成功。当我进行构建时,我在 pod 框架上收到以下错误:

building for iOS Simulator, but linking in object file built for iOS, for architecture arm64

可能还有错误:

Unable to load standard library for target 'arm64-apple-ios11.0'

当我去 运行 lipo -info 框架时,它有: armv7s armv7 i386 x86_64 arm64.

之前,该项目的有效架构设置为:armv7、armv7s 和 arm64。

在 Xcode 12 中,根据 Apple 的文档,该设置消失了。架构设置为 $(ARCHS_STANDARD)。我没有在排除的架构中设置任何内容。

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

我找到了解决办法! SwiftUI Previews not working with Firebase

如果您将模拟器的排除架构设置为 arm64,它将编译。

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

"构建设置编辑器不再包含有效架构构建设置 (VALID_ARCHS),并且不鼓励使用它。取而代之的是一个新的排除架构构建设置 (EXCLUDED_ARCHS)。如果项目包含 VALID_ARCHS,设置将显示在构建设置编辑器的 User-Defined 部分。(15145028)"

我能够通过手动编辑项目文件解决这个问题(我不知道如何使用 Xcode 从项目文件中删除该项目)并删除所有引用 [=19= 的行].之后,我就可以很好地构建模拟器了。

Valid Architectures 构建设置已在 Xcode12 中删除。如果您在此构建设置中有值,则它们会导致问题,需要将其删除。

我能够通过将 VALID_ARCHS 构建设置重新添加为 user-defined 构建设置(没有值)来“清除”它,运行ning 项目(失败了),然后删除 VALID_ARCHS 构建设置。之后,我就可以在模拟器上运行了。

我的架构构建设置是标准架构

您可以通过 Build Settings 中的加号按钮添加 user-defined 设置:

升级到 Xcode12 后,我仍然可以为真实设备构建,但不能为模拟器构建。 Podfile 构建仅适用于真实设备。

我在构建设置 > User-Defined 下删除了 VALID_ARCHS,它成功了!在找到这个之前敲了一段时间我的头。

这里的问题是 Xcode11 中的有效架构。打开 Xcode11 中的项目并将 Valid architectures 值更改为 $(ARCHS_STANDARD) 用于您的项目、目标和 Pods。重新打开 Xcode 12 中的项目并构建。

我通过在项目目标和 Pod 目标的“排除架构”中添加“arm64”解决了这个问题。

Xcode → 目标项目构建设置排除的架构 → *“arm64”

Xcode → Pod 目标构建设置排除的架构 → *“arm64”

在您的xxx.framework podspec 文件中,添加以下配置。 避免使用包含 arm64 模拟器架构的 pod 包。

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

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

  • 为此,导航至项目的 Build Settings 并添加 Any iOS Simulator SDK 的值 arm64 位于 Excluded Architecture.

  • 如果您使用的是自定义 XCConfig 文件,您只需添加此行即可排除模拟器架构。

    EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
    

    然后

    您必须对 Pod 项目 执行相同的操作,直到所有 Cocoa pod 供应商在其 Podspec[=52] 中添加以下内容=].

    s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
    s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
    

    您可以在 Pod 项目的 Build Settings 中手动添加 Excluded Architecture,但是当您添加时它会被覆盖 使用 pod install.

    代替此,您可以在 Podfile 中添加此代码段。每次 运行 pod install.

    时,它都会写入必要的 Build Settings
    post_install do |installer|
      installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
      end
    end
    

就我而言:

我有四种配置(+ DebugQa 和 ReleaseQa)。 Cocoapods 用作依赖管理器。

对于DebugQa,我在设备上和模拟器上收集,ReleaseQa只在设备上收集。

它有助于在 PodsProject 中将 BuildActiveArchitecture 设置为“是”。

就我而言,我试图在 watchOS 7 模拟器上 运行 处于发布模式,但 iOS 14 模拟器处于调试模式。

所以只需将两个模拟器都置于 Debug/Release 模式就解决了我的问题!

Xcode 12

正在从 User-Defined 下的 构建设置 中删除 VALID_ARCH小组作业对我来说。

如果您在 Xcode 12 中使用模拟器而不是真实设备遇到问题,是的,您必须 删除 VALID_ARCHS 设置,因为它不再受支持。转到“构建设置”,搜索“VALID_ARCHS”,然后删除 user-defined 属性。在你拥有的每个目标中进行。

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

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

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

我将其包含在我的 Podfile 中:

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 加 (iOS 13.4)

"Build Active Architecture Only"(ONLY_ACTIVE_ARCH) 构建设置设置为是,xcode 要求使用 arm64,因为 Silicon MAC 架构是 arm64。

arm64 已添加为 Xcode12 中的模拟器 arch 以支持 Silicon MAC。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json

对我来说,以下设置有效:

构建设置排除的架构.

我在“任何 iOS 模拟器 SDK”选项的发布和调试模式中添加了“arm64”。

TL;DR;

为您的 libraries/apps 将“仅构建活动架构 (ONLY_ACTIVE_ARCH)”设置为 Yes,甚至 release[=77] =]模式。


在尝试确定问题的根本原因时,我发现了一些关于 Xcode 12.

的有趣事实
  1. Xcode 12 实际上是 Apple silicon 的垫脚石,遗憾的是还没有(写答案时) .但是有了那个平台,我们将得到一个基于 arm64 的 macOS,其中模拟器也将 运行 在 arm64 架构上,不像现在的 Intel-based x86_64架构。

  2. Xcode 通常依赖于“运行 目标”来构建其 libraries/applications。因此,当模拟器是 chosen 作为“运行 目的地”时,它会为可用的模拟器架构构建应用程序,而当设备是 chosen 作为“运行 ] Destination”它为设备支持的架构构建(arm*)。

  3. xcodebuild,在 Xcode 12+ 构建系统中,将 arm64 视为支持 Apple 芯片的模拟器的有效架构。因此,当模拟器是 chosen 作为 运行 目的地时,它也可能会尝试 compile/link 您的 libs/apps 来对抗基于 arm64 的模拟器。因此它发送 clang(++) 一些目标标志,例如 --- 格式中的 arm64-apple-ios13.0-simulator 并且 clang 尝试 build/link 反对基于 arm64 的模拟器最终在基于 Intel 的 Mac.

    上失败
  4. xcodebuild 仅针对 Release 版本尝试此操作。为什么?因为,“仅构建活动架构 (ONLY_ACTIVE_ARCH)”构建设置通常仅针对“发布”配置设置为“否”。这意味着 xcodebuild 将尝试为选定的 运行 发布构建目标构建 libs/apps 的所有架构变体。对于模拟器 运行 目的地,它将包括 x86_64arm64 现在, 因为 arm64 in Xcode 12+ 也是支持 Apple 芯片的模拟器 架构。

简单地说,Xcode 将无法在尝试命令行时构建您的应用程序,xcodebuild(默认为发布构建,请参阅项目设置的常规选项卡)或其他方式并且 尝试构建 运行 目的地 支持的所有架构变体。因此,解决此问题的一个简单方法是在 libraries/apps 中将“仅构建活动架构 (ONLY_ACTIVE_ARCH)”设置为 Yes,即使对于发布模式也是如此。

如果库包含为 Pods 并且您可以访问 .podspec 您可以简单地设置:

spec.pod_target_xcconfig = { 'ONLY_ACTIVE_ARCH' => 'YES' }

spec.user_target_xcconfig = { 'ONLY_ACTIVE_ARCH' => 'YES' } # not recommended

我个人不喜欢第二行,因为 pods shouldn't pollute the target project 并且它可以在目标设置中被覆盖,本身。因此,消费者项目有责任通过某种方式覆盖设置。但是,这可能是成功检查 podspecs 所必需的。

但是,如果您无法访问 .podspec,您可以随时在安装 pods 期间更新设置:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

我担心的一件事是,当我们实际归档库和应用程序时,这会产生什么影响。在存档期间,应用程序通常采用“发布”配置,因为这将创建一个发布版本,仅考虑当前 运行 目标的活动架构,使用这种方法,我们可以 lose 切片来自目标构建的 armv7、armv7s 等。但是,我注意到文档说(在附图中突出显示)当我们选择 ose“通用 iOS Device/Any 设备”作为 运行 时,此设置将被忽略目的地,因为它没有定义任何特定的体系结构。所以我想如果我们将我们的应用程序存档为 运行 目的地,那么我们应该会很好os。

构建配置切换回调试模式或打开仅构建活动架构调试和发布模式。

原因是您的 library/framework 不支持新的模拟器架构 ARM64(运行 在 Mac 上使用 Apple silicon 处理器)。

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

我在从命令行构建模拟器框架时需要 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

Build Settings 上搜索 VALID_ARCH 然后按 delete。 这应该适用于 Xcode 12.0.1

将行“arm64”(不带引号)添加到路径:Xcode* → ProjectBuild settings架构排除的架构.

此外,对 Pods 执行相同的操作。在这两种情况下,对于调试和发布字段。

或详细...

使用 Xcode 12 部署到模拟器时这里提到的错误也是影响我的事情之一。在我的每个项目上只 right-clicking 并在 finder 中显示,在 Atom 中打开 .xcodeproj,然后浏览 .pbxproj 并删除所有 VALIDARCHS 设置。这就是它对我有用的原因。

我尝试了其他一些建议(不包括 arm64,仅构建活动架构),这些建议似乎让我的构建更进一步,但最终让我陷入另一个错误。最好首先检查 VALIDARCH 设置。

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

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

在我的框架项目中,我的构建阶段有一个 Universal Framework 任务。如果您是这种情况:

  • 在构建阶段将以下内容添加到您的 xcodebuild 任务中: EXCLUDED_ARCHS="arm64"

接下来你必须更改以下项目Build Settings:

  • 删除VALID_ARCHS用户自定义设置
  • ONLY_ACTIVE_ARCH设为YES ***

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

只添加任何iOS模拟器SDKx86_64项目的构建设置VALID_ARCHS 适合我。

Xcode 版本:12.1 (12A7403)

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

  • 您可以将这些框架名称(xxx.framework) 添加到TargetBuild SettingsExcluded源文件名调试任何iOS模拟器SDK.
  • 然后修改Framework Search Paths删除这些框架的路径DebugAnyiOS模拟器SDK.

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

更新:2020 年 10 月

您可以简单地为排除架构下的Debug > Simulator - iOS 14.O SDK设置arm64

为模拟器编译时的问题:

为 iOS 模拟器构建,但链接到为 iOS、架构 arm64

构建的目标文件
Xcode 12.1, Pod 1.9.1

我的项目结构

  • 主要目标
  • 共享扩展
  • 通知服务扩展
  • 子模块,自定义框架
  • 播客文件
  1. arm64 添加到构建设置 -> 所有目标中的 Exclude Architecture

  2. VALID_ARCHS 中删除了 arm64 并在所有目标中添加了 x86_64

  3. podfile

    中添加如下代码
    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
     end
    end
    
  4. 做了pod update,删除了podfile.lock,做了pod install

  5. 做一个干净的构建。

首先,为Pod项目生成x86_64!!!!

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ARCHS'] = "arm64 x86_64"
        end
    end
end

其次,为VALID_ARCHS添加“x86_64”。

我在网上尝试了很多无用的答案后发现了这个,这对我有用。

当我将 $(ARCHS_STANDARD) 设置为 VALID_ARCHS 以调试任何 iOS 模拟器 SDK 时,它对我有用。 我还为调试设置了 YESONLY_ACTIVE_ARCH

我了解 arm64 和 Xcode 12 的问题,我能够通过排除 iPhone 模拟器的 arm64 架构或为发布方案设置 ONLY_ACTIVE_ARCH 来解决构建问题。但是我仍然无法使用 pod repo push.

来推动我的框架

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

一个解决方案可能是强制 Cocoapods 在验证项目时添加 post 安装脚本,或者让它构建调试方案,因为调试方案只构建活动架构。

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

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

您可以按照此处的说明进行操作。 Carthage XCODE 12

然后在你配置好Carthage之后。将 arm64 置于构建设置的“排除架构”中。

尝试 运行 您的项目使用模拟器。模拟器应该 运行 没有任何错误。

在排除 arm64 后,我总是得到 ARCHS[@]: unbound variable。对我来说,唯一的解决方案是将 x86_64 添加到此处提到的目标构建设置 Problems after upgrading to Xcode 12:ld: building for iOS Simulator, but linking in dylib built for iOS, architecture arm64 您也可以删除之前添加的排除 arm64。

Xcode 12.3

我通过将“验证工作区”设置为“是”解决了这个问题

在尝试和搜索不同的解决方案后,我认为最安全的方法是在 Podfile

的末尾添加以下代码
post_install do |pi|
   pi.pods_project.targets.each do |t|
       t.build_configurations.each do |bc|
          bc.build_settings['ARCHS[sdk=iphonesimulator*]'] =  `uname -m`
       end
   end
end

这样您只需将 iOS 模拟器的编译器架构覆盖为当前 cpu 的架构。与其他解决方案相比,此解决方案也适用于 Apple Silicon.

的计算机

1.Add arm64Build settings -> 所有目标中的 Exclude Architecture

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

  1. 在 Finder 中右键单击 Xcode
  2. 获取信息
  3. 用 Rosetta 打开

建议的答案是 outdated/incorrect。

您应该首先尝试同时更新 CocoaPods and the dependencies for your library/app, and then, if that doesn't work, contact the vendors of any dependencies you are using to see if they have an update in progress to add support for arm64 Simulator slices on M1 Mac。

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

我发现

  1. 使用 Rosetta(在 Finder > 获取信息 > 使用 Rosetta 打开中查找 Xcode)
  2. Build Active Architecture Only 将项目和 Target 中的所有内容设置为 YES
  3. (您可能不需要它,请阅读下面的评论)并将其包含在 podfile:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

对我有用。

我们有 Pods 和 SPM,但它们无法与其他答案的任何组合一起使用。我的同事们都在使用 Intel MacBooks,而且一切仍然适用于他们!

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

当我遇到这个问题时,我正在尝试构建 xcFramework。没有任何帮助,但我设法用 lipo 解决了这个问题并分享了我的脚本:

OUTPUT_DIR_PATH="${PROJECT_DIR}/XCFramework"

function archivePathSimulator {
    local DIR=${OUTPUT_DIR_PATH}/archives/"-SIMULATOR"
    echo "${DIR}"
}

function archivePathDevice {
    local DIR=${OUTPUT_DIR_PATH}/archives/"-DEVICE"
    echo "${DIR}"
}

function archive {
    echo "▸ Starts archiving the scheme:  for destination: ;\n▸ Archive path: .xcarchive"
    xcodebuild clean archive \
    -project "${PROJECT_NAME}.xcodeproj" \
    -scheme  \
    -configuration ${CONFIGURATION} \
    -destination "" \
    -archivePath "" \
    SKIP_INSTALL=NO \
    OBJROOT="${OBJROOT}/DependentBuilds" \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES | xcpretty
}

# Builds archive for iOS simulator & device
function buildArchive {
    SCHEME=

    archive $SCHEME "generic/platform=iOS Simulator" $(archivePathSimulator $SCHEME)
    archive $SCHEME "generic/platform=iOS" $(archivePathDevice $SCHEME)
}

# Creates xc framework
function createXCFramework {
    FRAMEWORK_ARCHIVE_PATH_POSTFIX=".xcarchive/Products/Library/Frameworks"
    FRAMEWORK_SIMULATOR_DIR="$(archivePathSimulator )${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"
    FRAMEWORK_DEVICE_DIR="$(archivePathDevice )${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"

    echo "Removing ${FRAMEWORK_SIMULATOR_DIR}/.framework/"

    if lipo "${FRAMEWORK_SIMULATOR_DIR}/.framework/" -verify_arch "arm64"; then
        echo "Removing arm64"
        lipo -remove "arm64" -output "${FRAMEWORK_SIMULATOR_DIR}/.framework/" "${FRAMEWORK_SIMULATOR_DIR}/.framework/"
    fi

    xcodebuild -create-xcframework \
               -framework ${FRAMEWORK_SIMULATOR_DIR}/.framework \
               -framework ${FRAMEWORK_DEVICE_DIR}/.framework \
               -output ${OUTPUT_DIR_PATH}/xcframeworks/.xcframework
}

echo "#####################"
echo "▸ Cleaning the dir: ${OUTPUT_DIR_PATH}"
rm -rf $OUTPUT_DIR_PATH

DYNAMIC_FRAMEWORK="${PROJECT_NAME}"

echo "▸ Archive $DYNAMIC_FRAMEWORK"
buildArchive ${DYNAMIC_FRAMEWORK}

echo "▸ Create $DYNAMIC_FRAMEWORK.xcframework"
createXCFramework ${DYNAMIC_FRAMEWORK}

轻松修复

  1. 右键单击“应用程序”文件夹中的 xcode
  2. 获取信息
  3. Select“使用 Rosetta 打开”

运行.

Xcode get info

在我的例子中,它 100% 有效。试试这个:

我有一个临时解决方案。

你照着图就行了

  • 双击架构和select 其他删除所有行

  • 加两件事arm7s and arm7

  • 运行 您在 iPhone 上的物理设备,而不是模拟器

  • 享受...

在我的例子中,错误是由 GTMAppAuth 抛出的,我在我的 Flutter 项目中使用 Google 登录。

解决方案:您必须转到该包并单击 YESBuild Active Architecture Only.

我遇到了同样的问题并试图在 M1 Mac 上启动 React Native 应用程序。请注意,我的英特尔 Mac 在同一项目中运行良好,没有出现此错误。

解决我问题的方法是强制 Xcode 通过 Rosetta 打开。

实现这个:

右键单击 Applications 文件夹中的 Xcode* → Get Info → 选中 'Open using Rosetta' 复选框。

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

ld: warning: ignoring file Pods/.../X.xcframework/ios-arm64_armv7/X.xcframework/X, missing required architecture x86_64 in file Ignoring file Pods/.../X.xcframework/ios-arm64_armv7/X.xcframework/X (2 slices)

我在项目设置的框架搜索路径中有递归路径$(SRCROOT)。去掉之后,项目构建没有报错。

在下图中,在 Excluded Architectures → 在调试和发布中点击 + 按钮 → 在调试和发布中。

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

Frameworks/release' xxx/Library/Developer/Xcode/DerivedData/xxx-cuytrcyjdlfetmavpdonsknoypgk/Build/Products/Debug-iphoneos/AppsFlyerLib.framework/AppsFlyerLib(AFSDKDevice.o), building for iOS, but linking in object file built for Mac Catalyst, file 'xxx/Library/Developer/Xcode/DerivedData/xxx-cuytrcyjdlfetmavpdonsknoypgk/Build/Products/Debug-iphoneos/AppsFlyerLib.framework/AppsFlyerLib' for architecture arm64

我们用 sudo gem update cocoapods 修复了它。

就我而言,更新 CocoaPods 有帮助:

  1. 卸载 CocoaPods(如果已安装):

    sudo gem uninstall cocoapods
    
  2. 安装 CocoaPods:

    brew install cocoapods
    
  3. 如果您有链接错误:

    brew link --overwrite cocoapods`
    
  4. 运行 pod install

转到“目标”部分,select 每个目标并执行以下操作:

  • 仅构建活动架构设置为是
  • 添加Excluded Architectures并将其值设置为arm64(见附件)
  • 将活动方案(在项目名称旁边的工具栏上)设置为任何 iOS 模拟器
  • Product 菜单中清除 Build 文件夹并构建。

隐藏在所有这些答案中Gem

我在主项目的目标中更改了“排除的架构”,但 PODS 项目没有。真隐藏gem。这个问题我已经有好几个星期了。

Xcode 13.2.1,蒙特雷,目标 iOS 14.0,椰子 1.11.2

我在包含 LogRocket and/or Plaid 时遇到了类似的问题——它们是 xcframeworks,在我的本地工作正常但不能构建bitrise,我已经尝试了上面的所有答案:

  • EXCLUDED_ARCHS arm64
  • 在 Podfile
  • 中将 ONLY_ACTIVE_ARCH 设置为 YES
  • VALIDATE_WORKSPACEYES
  • 在 Podfile
  • 中将 ARCHS[sdk=iphonesimulator*] 设置为 uname -m

none 作品

但通过指定目标 iOS 版本或删除它会起作用:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
      # OR
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
    end
  end
end

我在切换到 Macbook Pro M1 App Silicon 后遇到了同样的错误。 对我有用的解决方案:

  • 删除Podfile.lock
  • 运行 pod 安装 就是这样。

转到 finder -> 应用程序 -> Xcode -> 右键单击​​ Xcode -> Select 使用 rosetta 打开

Xcode 版本 13.2.1 和 macOS Monterey 12.0.1

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

"in /Users//Desktop/_iOS_app/Pods/iOS/framework/(CLSInternalReport.o), building for iOS Simulator, but linking in object file built for iOS, file '/Users/y/Desktop/_iOS_app/Pods/iOS/.framework/for architecture arm64"

我找到了一个完美的解决方案。

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

所以不是 selecting 整个项目只排除模拟器的体系结构到 arm64。

步骤: 在项目文件之上, Select 目标 > 构建设置 > 体系结构 > 排除的体系结构。 现在添加 select "any iOS simulator SDK" 并给它赋值 arm64.

参考下图