Apple Silicon 支持
随着 Apple Silicon 硬件将在今年晚些时候发布,您该如何让自己的 Electron 应用在新硬件上运行呢?
随着 Electron 11.0.0-beta.1 的发布,Electron 团队现在开始提供可在 Apple 计划于今年晚些时候推出的新 Apple Silicon 硬件上运行的 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.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 中新技术带来的好处,例如更大的内存页大小。
- 我们有没有提到过性能会显著下降?