655

我正在尝试在 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。

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

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

4

49 回答 49

994

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

  • 为此,导航到项目的Build Settings并在Excluded Architecture中添加具有值的Any iOS Simulator SDKarm64

    在此处输入图像描述

或者

  • 如果您使用的是自定义XCConfig文件,您可以简单地添加这一行来排除模拟器架构。

    EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
    

    然后

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

    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

    post_install do |installer|
      installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
      end
    end
    
于 2020-09-18T11:41:45.217 回答
235

TL;博士;

将您的库/应用程序的“仅构建活动架构 ( ONLY_ACTIVE_ARCH)”设置为,即使对于发布模式也是如此。


在试图找出问题的根本原因时,我意识到了一些关于 Xcode 12 的有趣事实。

  1. Xcode 12 实际上是Apple 芯片的垫脚石,不幸的是,它还不可用(当答案被写出来时)。但是有了这个平台,我们将获得一个基于 arm64 的 macOS,其中模拟器也将在 arm64 架构上运行,这与目前基于 Intel 的x86_64架构不同。

  2. Xcode 通常依赖于“运行目标”来构建它的库/应用程序。因此,当一个模拟器被选为“运行目标”时,它会为可用的模拟器架构构建应用程序,而当一个设备被选为“运行目标”时,它会为设备支持的架构构建应用程序 ( arm*)。

  3. xcodebuild,在 Xcode 12+ 构建系统中被arm64视为支持 Apple 芯片的模拟器的有效架构。So when a simulator is chosen as the run destination, it can potentially try to compile/link your libs/apps against arm64based simulators, as well. 因此它会发送clang(++)一些 -target 标志arm64-apple-ios13.0-simulator,例如 <architecture>-<os>-<sdk>-<destination> 格式,然后 clang 尝试构建/链接基于 arm64 的模拟器,该模拟器最终在基于 Intel 的 Mac 上失败。

  4. 但仅针对发布xcodebuild版本尝试此操作。为什么?因为,“仅构建活动架构 ( )”构建设置通常仅针对“发布”配置设置为“否”。这意味着将尝试为选定的运行目标构建您的库/应用程序的所有架构变体以进行发布构建。对于 Simulator 运行目标,它将同时包含这两者,因为Xcode 12+ 中也是支持 Apple 芯片的模拟器的受支持架构。ONLY_ACTIVE_ARCHxcodebuildx86_64arm64arm64

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

在此处输入图像描述

在此处输入图像描述

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

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

spec.user_target_xcconfig = { 'ONLY_ACTIVE_ARCH' => 'YES' } # 不推荐

我个人不喜欢第二行,因为pod 不应该污染目标项目,而且它本身可以在目标设置中被覆盖。因此,消费者项目应该有责任通过某种方式覆盖该设置。但是,这对于成功 linting podspecs 可能是必要的。

但是,如果您无权访问.podspec,则始终可以在安装 pod 期间更新设置:

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

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

于 2020-09-30T14:33:14.377 回答
114

我找到了解决办法!SwiftUI 预览不适用于 Firebase

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

排除模拟器的架构

于 2020-08-27T18:58:36.190 回答
69

Xcode 12 中删除了 Valid Architectures 构建设置。如果您在此构建设置中有值,它们会导致问题并需要删除。

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

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

您可以从Build Settings中的加号按钮添加用户定义的设置:

用户自定义设置

于 2020-09-02T21:50:02.333 回答
67

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

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

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

于 2021-02-16T22:37:22.450 回答
44

Xcode 12.3

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

在此处输入图像描述

于 2020-12-15T13:06:15.080 回答
28

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

构建设置排除的架构

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

在此处输入图像描述

于 2020-09-30T12:58:10.170 回答
26

所有这些答案中的隐藏宝石

我已经更改了主项目目标中的“排除架构”,但没有更改 PODS 项目。真正隐藏的宝石。我已经被这个问题困扰了好几个星期了。 不包括 PODS PROJECT 中的 arm64

于 2021-09-29T15:22:44.210 回答
25

在尝试和搜索了不同的解决方案之后,我认为最安全的方法是在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的计算机。

于 2020-12-25T20:43:09.023 回答
21

轻松修复

  1. 右键单击 Applications 文件夹中的 xcode
  2. 获取信息
  3. 选择“使用 Rosetta 打开”

跑。

Xcode 获取信息

于 2021-05-01T17:28:53.393 回答
17

我找到

  1. 使用 Rosetta(在 Finder 中查找 Xcode > 获取信息 > 使用 Rosetta 打开)
  2. Build Active Architecture Only设置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

为我工作。

我们同时拥有 Pod 和 SPM,但它们不能与其他答案的任何组合一起使用。我的同事都使用英特尔 MacBook,而且一切都对他们有用!

于 2021-02-18T18:12:36.947 回答
17

转到目标部分,选择每个目标并执行以下操作:

  • Build Active Architecture Only设置为 YES
  • 添加排除架构并将其值设置为arm64(见附件)
  • 将活动方案(在项目名称旁边的工具栏上)设置为任何 iOS 模拟器
  • 从产品菜单中清理构建文件夹并构建。

在此处输入图像描述

于 2021-08-27T08:19:56.740 回答
16

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

不过,您可能需要在 podfile 的底部添加一个脚本,以使 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
于 2020-09-24T09:14:40.293 回答
15

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

我在 Build Settings > User-Defined 下删除了 VALID_ARCHS,它起作用了!在找到这个之前敲了我的头一段时间。

于 2020-09-17T04:54:15.210 回答
15

我通过在“Excluded Architectures”中为项目目标和 pod 目标添加“arm64”解决了这个问题。

Xcode →目标项目构建设置排除架构→ *"arm64"

Xcode → Pod TargetBuild SettingExcluded Architectures → *"arm64"

于 2020-09-17T15:14:07.833 回答
14

1.添加arm64Build settings->Exclude Architecture在所有目标中。

Xcode 截图

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

  1. 在 Finder 中右键单击 Xcode
  2. 获取信息
  3. 与罗塞塔一起开放
于 2021-01-11T10:31:27.247 回答
10

Xcode 12

VALID_ARCH为我从用户定义的组工作下的构建设置中删除。

在此处输入图像描述

于 2020-09-24T06:58:02.670 回答
9

我在从命令行构建框架时遇到问题。我的框架依赖于其他缺少对基于 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
于 2020-10-06T13:32:57.170 回答
7

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

" Build Settings 编辑器不再包含 Valid Architectures 构建设置 (VALID_ARCHS),并且不鼓励使用。相反,有一个新的 Excluded Architectures 构建设置 (EXCLUDED_ARCHS)。如果项目包含 VALID_ARCHS,则该设置将显示在 User -构建设置编辑器的定义部分。(15145028)

我能够通过手动编辑项目文件(我无法弄清楚如何使用 Xcode 从项目文件中删除项目)并删除所有引用 VALID_ARCHS 的行来解决此问题。之后,我就可以为模拟器构建了。

于 2020-09-01T21:12:24.143 回答
5

在尝试了该问题的几乎所有答案并阅读了 Apple 开发者论坛之后,我发现只有一种解决方案对我有用。

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

在我的框架项目中,我的构建阶段有一个通用框架任务。如果您遇到这种情况:

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

接下来,您必须更改以下项目Build Settings

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

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

于 2020-10-14T20:15:21.933 回答
4

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

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
于 2020-09-18T11:04:07.350 回答
4

对于通过 carthage 安装的特定库,我也遇到了同样的问题。对于使用 Carthage 的用户,由于 Carthage 无法在 Xcode 12 中开箱即用,本文档将指导大多数情况下的解决方法。好吧,很快,Carthage 构建了胖框架,这意味着该框架包含所有受支持架构的二进制文件。在 Apple Silicon 推出之前,它一切正常,但现在出现了冲突,因为存在重复的架构(用于设备的 arm64 和用于模拟器的 arm64)。这意味着 Carthage 无法将特定于架构的框架链接到单个胖框架。

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

然后在你配置 Carthage 之后。将 arm64 放在构建设置的“排除架构”中。 在此处输入图像描述

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

于 2020-11-10T08:04:14.313 回答
4

不要忘记在将 arm64 添加到排除架构后清理构建文件夹。

于 2021-02-19T00:10:22.377 回答
3

更新:2020 年 10 月

您可以简单地设置arm64为仅Debug > Simulator - iOS 14.O SDK在 Excluded Architecture 下。

在此处输入图像描述

于 2020-10-22T09:40:10.217 回答
3

首先,为 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”。

在此处输入图像描述

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

于 2020-10-26T09:53:56.293 回答
3

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

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

为达到这个:

右键单击Applications文件夹中的 Xcode* →获取信息→ 选中“使用 Rosetta 打开”复选框。

于 2021-07-01T14:35:17.613 回答
2

这里的问题是 Xcode 11 中的有效架构。在 Xcode 11 中打开项目并将有效架构值更改$(ARCHS_STANDARD)为您的项目、目标和 Pod。在 Xcode 12 中重新打开项目并构建。

于 2020-09-17T10:40:45.327 回答
2

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

在此处输入图像描述

于 2020-10-27T18:06:42.080 回答
2

Xcode 13.2.1,Monterey,目标 iOS 14.0,cocoapod 1.11.2

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

  • EXCLUDED_ARCHSarm64
  • 在 Podfile 中设置ONLY_ACTIVE_ARCHYES
  • VALIDATE_WORKSPACEYES
  • 在 Podfile 中设置ARCHS[sdk=iphonesimulator*]uname -m

它们都不起作用

但是通过指定目标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
于 2022-01-08T13:20:23.457 回答
1

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

构建设置上的 VALID_ARCH

于 2020-10-08T17:30:21.780 回答
1

编译模拟器时的问题:

为 iOS 模拟器构建,但在为 iOS 构建的对象文件中链接,用于架构 arm64

Xcode 12.1, Pod 1.9.1

我的项目结构

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

    在此处输入图像描述

  2. arm64从所有目标中删除VALID_ARCHS和添加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. 做一个干净的构建。

于 2020-10-23T10:17:50.800 回答
1

就我而言,错误是由我在Flutter项目中使用 Google 登录时使用的 GTMAppAuth 引发的。

解决方案:您必须转到该包并在Build Active Architecture Only中单击YES

Xcode 12,为 iOS 模拟器构建,但在为 iOS 构建的目标文件中链接,用于架构 arm64

于 2021-06-07T13:10:10.987 回答
1

在下图中,在排除架构中 → 在调试和发布中点击 + 按钮 → 在调试和发布中。

在此处输入图像描述

于 2021-07-26T14:40:05.153 回答
1

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

  1. 如果已安装,请卸载 CocoaPods:

    sudo gem uninstall cocoapods
    
  2. 安装 CocoaPods:

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

    brew link --overwrite cocoapods`
    
  4. pod install

于 2021-08-02T14:39:21.607 回答
0

就我而言:

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

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

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

于 2020-09-20T09:08:30.110 回答
0

就我而言:Xcode 12

我设置空值EXCLUDED_ARCHS并设置ONLY_ACTIVE_ARCHDebug = YESRelease = 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

它在我的 Simulator iPhone 8 (iOS 12) 和 iPhone 11 Pro Max (iOS 14) 以及我的设备 iPhone 7 Plus (iOS 13.4) 上运行

于 2020-09-29T05:43:57.357 回答
0

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

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

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

于 2020-09-29T18:05:12.860 回答
0

将Build Configuration切换回Debug模式或为 Debug 和 Release 模式打开Build Active Architecture Only 。

原因是您的库/框架不支持新的模拟器架构 ARM64(在带有Apple 硅处理器的 Mac 上运行)。

于 2020-10-05T22:52:28.083 回答
0

将行“arm64”(不带引号)添加到路径: Xcode* → ProjectBuild settingsArchitecturesExcluded architectures

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

或者详细...

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

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

于 2020-10-11T06:04:30.990 回答
0

仅将Any iOS Simulator SDKx86_64添加到项目的构建设置VALID_ARCHS对我有用。

Xcode 版本:12.1 (12A7403)

在此处输入图像描述

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

  • 您可以将这些框架名称 ( xxx.framework) 添加到TargetBuild SettingsExcluded Source File NamesDebugAny iOS Simulator SDK
  • 然后在DebugAny iOS Simulator SDK中修改Framework Search Paths删除这些框架的路径。

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

在此处输入图像描述

在此处输入图像描述

于 2020-10-22T03:13:07.260 回答
0

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

我发现在我的 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. 完成后不要忘记切换回来。

于 2020-10-30T20:15:58.030 回答
0

排除 arm64 后,我总是得到 ARCHS[@]: unbound variable。对我来说,唯一的解决方案是将 x86_64 添加到目标构建设置中,如此处所述升级到 Xcode 12 后的问题:ld:为 iOS 模拟器构建,但在为 iOS 构建的 dylib 中链接,架构 arm64您也可以删除您添加的排除 arm64前。

于 2020-11-24T14:06:21.570 回答
0

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

OUTPUT_DIR_PATH="${PROJECT_DIR}/XCFramework"

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

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

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

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

    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 $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"
    FRAMEWORK_DEVICE_DIR="$(archivePathDevice $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"

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

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

    xcodebuild -create-xcframework \
               -framework ${FRAMEWORK_SIMULATOR_DIR}/${1}.framework \
               -framework ${FRAMEWORK_DEVICE_DIR}/${1}.framework \
               -output ${OUTPUT_DIR_PATH}/xcframeworks/${1}.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}
于 2021-03-04T16:05:25.637 回答
0

就我而言,它可以 100% 工作。试试这个:

我有一个临时解决方案。

您只需按照图像。

  • 双击架构并选择其他删除所有行

  • 添加两个东西arm7s and arm7

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

  • 享受...

示例图片

于 2021-05-02T13:27:51.607 回答
0

对于模拟器/ SwiftUI预览,我遇到了同样的问题,并带有以下警告:

ld:警告:忽略文件 Pods/.../X.xcframework/ios-arm64_armv7/X.xcframework/X,在忽略文件 Pods/.../X.xcframework/ios-arm64_armv7/X 文件中缺少所需的架构 x86_64。 xcframework/X (2 片)

我在项目设置的框架搜索路径中有递归路径 $(SRCROOT) 。删除它后,项目构建没有错误。

于 2021-07-14T13:40:50.763 回答
0

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

Frameworks/release' xxx/Library/Developer/Xcode/DerivedData/xxx-cuytrcyjdlfetmavpdonsknoypgk/Build/Products/Debug-iphoneos/AppsFlyerLib.framework/AppsFlyerLib(AFSDKDevice.o),为 iOS 构建,但在为 Mac Catalyst 构建的目标文件中链接, 用于架构 arm64 的文件 'xxx/Library/Developer/Xcode/DerivedData/xxx-cuytrcyjdlfetmavpdonsknoypgk/Build/Products/Debug-iphoneos/AppsFlyerLib.framework/AppsFlyerLib'

我们用sudo gem update cocoapods.

于 2021-07-27T13:23:11.123 回答
0

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

  • 删除 Podfile.lock
  • 运行 pod install 就是这样。
于 2022-01-31T14:00:27.037 回答
0

转到查找器->应用程序-> Xcode->右键单击Xco​​de->选择使用rosetta打开

在此处输入图像描述

于 2022-02-16T08:28:56.490 回答
-1

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

因此,只需将两个模拟器都置于调试/发布模式就解决了我的问题!

于 2020-09-21T08:12:08.603 回答