Apple Silicon 芯片支持
随着苹果芯片将于今年晚些时候发布,您如何让Electron应用程序在新硬件上运行?
随着Electron 11.0.0-beta.1的发布,Electron团队现在正在编写在苹果计划于今年晚些时候发货的新苹果芯片上运行的Electron版本。 你可以通过npm install electron@beta
或从官网来下载最新的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
已经为 arm64
架构做好了支持。 只要您正在运行这些软件包的最新版本,您的应用就应该在将目标架构更新到 arm64
后正常工作。
将来, 我们将发布一个软件包,允许您将您的 arm64
和 x64
应用“合并”到一个单一的通用二进制软件包, 但值得注意的是,这个二进制文件可能会 非常巨大 并且可能不适合给用户发布。
更新:此软件包现在可在 @electron/universal
上使用。 您可以使用它将两个以打包的 x64 和 arm64 应用程序合并为一个二进制程序。
潜在问题
原生模块
当您正在针对一个新的架构时,您需要更新几个依赖关系,这可能会导致构建问题。 下面包含某些依赖关系的最低版本以供您参考。
依赖项 | 版本要求 |
---|---|
Xcode | >=12.2 |
node-gyp | >=7.1 |
electron-rebuild | >=1.12 |
electron-packager | >=15.1 |
由于这些依赖版本要求,您可能不得不修复/更新某些原生模块。 值得注意的是,Xcode 升级将引入新版本的 macOS SDK。 这可能会导致您的原生模块构建失败。
如何测试它
目前,Apple Silicon 应用程序只在 Apple Silicon 硬件上运行,在撰写这篇博文时暂没有商业用途。 如果您有一个开发者过渡套件,您可以在那里测试您的应用程序。 否则,您将不得不等待Apple Silicon硬件的生产发布,以测试您的应用是否正常。
Rosetta 2怎么样?
Rosetta 2 是苹果最近一次对他们的 Rosetta 技术的迭代。 允许您在新的 arm64 Apple Silicon 硬件上运行 x64 Intel 应用。 虽然我们相信x64 Electron应用程序将在Rosetta 2下运行,但有一些重要的事情需要注意(以及您应该发布原生arm64二进制文件的原因)。
- 您的应用的性能将明显下降。 Electron / V8 为 JavaScript 使用 JIT 编译,因为 Rosetta 工作的原理。 您实际上将运行两次JIT (一次在 V8 中,一次在 Rosetta)。
- 您失去了如内存页面大小的增加这样的 Apple Silicon 新技术的好处。
- 我们是否提到性能将显著 降级?