SQLite.swift 和M1芯片及模拟器

SQLite.swift and M1 chip and simulator

我有一个使用 SQLite.swift 的项目。最近我买了一台带有 M1 芯片的 MacBook Pro。之后,项目 运行 在设备上运行良好,但是当我尝试在模拟器上 运行 时,我从 Xcode:

收到此错误消息

Could not find module 'SQLite' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator.

我使用 cocoa pods 将 SQLite.swift 添加到我的项目中。我试图将其移至 SPM 但错误仍然存​​在。 搜索此错误后,我找到了解决方法:使用此选项打开 Xcode:Open using Rosetta,但这对我来说似乎是一个 hack。

这可以在 SQLite.swift 级别以某种方式解决吗?

谢谢。

您的项目正在尝试为 x86_64 构建,这将使它在 Rosetta 翻译下成为 运行。 SQLite.swift 正在为 arm64 正确构建,并将 运行 在模拟器中的 M1 上原生。由于 mis-match 整体构建失败。你绝对正确,在 Rosetta 下打开 Xcode 是一种黑客行为,你这样做会付出内存 + 性能的代价。

我建议检查您的 ARCHS 和 EXCLUDED_ARCHS 构建设置,以及您的其他依赖项。如果您的二进制依赖项尚未更新以支持 Simulator arm64,这可能会导致 Cocoapods 将架构强制为 x86_64。或者,您可能很久以前就设置了这些构建设置,但从未意识到。

今天正确的设置方法是:

  1. 切勿触摸 ARCHS 或 SUPPORTED_ARCHS
  2. 除非你有一个尚未更新的二进制依赖项,否则不要设置 EXCLUDED_ARCHS

默认情况下,Xcode 将使用您的 Mac 的本机架构为模拟器构建。在 Debug 构建中,它只构建一个架构,对于 Release,它构建所有支持的架构(这可能会有所不同,具体取决于您的 运行 目标是什么)。在这方面,模拟器与设备构建没有任何不同。