Apple Silicon 支持
随着 Apple Silicon 硬件预计于今年晚些时候发布,你的 Electron 应用在新硬件上的运行之路会是怎样的?
随着 Electron 11.0.0-beta.1 的发布,Electron 团队现已开始提供可在 Apple 计划于今年晚些时候发布的新 Apple Silicon 硬件上运行的 Electron 构建版本。你可以通过 npm install electron@beta
获取最新测试版,或直接从我们的发布网站下载。
它是如何工作的?
从 Electron 11 开始,我们将为 Intel Mac 和 Apple Silicon Mac 提供单独的 Electron 版本。在此变更之前,我们已经提供了两个构建产物:darwin-x64
和 mas-x64
,其中后者用于兼容 Mac App Store。现在,我们将再提供两个构建产物:darwin-arm64
和 mas-arm64
,它们是上述产物的 Apple Silicon 版本。
我需要做什么?
你需要发布两个版本的应用:一个用于 x64 (Intel Mac),一个用于 arm64 (Apple Silicon)。好消息是 electron-packager
、electron-rebuild
和 electron-forge
都已经支持 targeting arm64
架构。只要你运行的是这些包的最新版本,一旦你将目标架构更新为 arm64
,你的应用应该就能完美运行。
将来,我们将发布一个包,允许你将 arm64
和 x64
应用“合并”成一个通用的二进制文件,但值得注意的是,这个二进制文件将非常大,可能不适合分发给用户。
更新:此包现已在 @electron/universal
提供。你可以使用它将两个打包好的 x64 和 arm64 应用合并成一个单独的二进制文件。
潜在问题
原生模块
由于你要 targeting 新架构,你需要更新一些可能导致构建问题的依赖项。下面列出了某些依赖项的最低版本要求供你参考。
依赖项 | 版本要求 |
---|---|
Xcode | >=12.2.0 |
node-gyp | >=7.1.0 |
electron-rebuild | >=1.12.0 |
electron-packager | >=15.1.0 |
由于这些依赖项版本要求,你可能需要修复/更新某些原生模块。需要注意的是,Xcode 升级将引入新版本的 macOS SDK,这可能会导致你的原生模块构建失败。
如何测试?
目前,Apple Silicon 应用只能在 Apple Silicon 硬件上运行,而这些硬件在撰写这篇博文时尚未商业发布。如果你有 开发者过渡工具包 (Developer Transition Kit),你可以在上面测试你的应用。否则,你需要等到量产的 Apple Silicon 硬件发布后才能测试你的应用是否正常工作。
Rosetta 2 呢?
Rosetta 2 是 Apple Rosetta 技术的最新迭代,它允许你在新的 arm64 Apple Silicon 硬件上运行 x64 Intel 应用。虽然我们认为 x64 Electron 应用可以在 Rosetta 2 下运行,但有一些重要事项需要注意(以及为何你应该发布原生 arm64 二进制文件的原因)。
- 你的应用性能将显著降低。Electron / V8 使用 JIT (即时编译) 来编译 JavaScript,由于 Rosetta 的工作方式,你实际上会运行两次 JIT (一次在 V8 中,一次在 Rosetta 中)。
- 你将失去 Apple Silicon 新技术的优势,例如增大的内存页大小。
- 我们有没有提到性能将显著降低?