Skip to main content

苹果硅支持

· 6 min read

随着 Apple Silicon 硬件将于今年晚些时候发布,你如何让你的 Electron 应用在新硬件上运行?

🌐 With Apple Silicon hardware being released later this year, what does the path look like for you to get your Electron app running on the new hardware?


随着 Electron 11.0.0-beta.1 的发布,Electron 团队现在提供可在苹果预计今年晚些时候发售的新 Apple Silicon 硬件上运行的 Electron 版本。你可以通过 npm install electron@beta 获取最新的测试版,或者直接从我们的发布网站下载。

🌐 With the release of Electron 11.0.0-beta.1, the Electron team is now shipping builds of Electron that run on the new Apple Silicon hardware that Apple plans on shipping later this year. You can grab the latest beta with npm install electron@beta or download it directly from our releases website.

它是如何工作的?

🌐 How does it work?

从 Electron 11 开始,我们将分别为 Intel Mac 和 Apple Silicon Mac 发布不同版本的 Electron。在此之前,我们已经发布了两个软件包,darwin-x64mas-x64,其中 mas-x64 用于 Mac App Store 的兼容性。现在,我们又发布了另外两个软件包,darwin-arm64mas-arm64,它们是前述软件包在 Apple Silicon 上的对应版本。

🌐 As of Electron 11, we will be shipping separate versions of Electron for Intel Macs and Apple Silicon Macs. Prior to this change, we were already shipping two artifacts, darwin-x64 and mas-x64, with the latter being for Mac App Store compatibility usage. We are now shipping another two artifacts, darwin-arm64 and mas-arm64, which are the Apple Silicon equivalents of the aforementioned artifacts.

我需要做什么?

🌐 What do I need to do?

你需要发布你的应用的两个版本:一个用于 x64(Intel Mac),另一个用于 arm64(Apple Silicon)。好消息是,electron-packagerelectron-rebuildelectron-forge 已经支持针对 arm64 架构。只要你使用的是这些软件包的最新版本,一旦将目标架构更新为 arm64,你的应用应该能完美运行。

🌐 You will need to ship two versions of your app: one for x64 (Intel Mac) and one for arm64 (Apple Silicon). The good news is that electron-packager, electron-rebuild and electron-forge already support targeting the arm64 architecture. As long as you're running the latest versions of those packages, your app should work flawlessly once you update the target architecture to arm64.

将来,我们会发布一个软件包,允许你将 arm64x64 应用合并成一个通用二进制文件,但值得注意的是,这个二进制文件会非常大,可能不适合直接发布给用户。

更新:此软件包现在可以在 @electron/universal 获得。你可以使用它将两个已打包的 x64 和 arm64 应用合并为一个二进制文件。

🌐 Update: This package is now available at @electron/universal. You can use it to merge two packaged x64 and arm64 apps into a single binary.

潜在问题

🌐 Potential Issues

原生模块

🌐 Native Modules

由于你正在针对新的架构,你需要更新几个依赖,这可能会导致构建问题。下面列出了某些依赖的最低版本供你参考。

🌐 As you are targeting a new architecture, you'll need to update several dependencies which may cause build issues. The minimum version of certain dependencies are included below for your reference.

依赖版本要求
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

由于这些依赖版本要求,你可能需要修复/更新某些本地模块。值得注意的是,Xcode 升级将引入新的 macOS SDK 版本,这可能会导致你的本地模块构建失败。

🌐 As a result of these dependency version requirements, you may have to fix/update certain native modules. One thing of note is that the Xcode upgrade will introduce a new version of the macOS SDK, which may cause build failures for your native modules.

如何测试?

🌐 How do I test it?

目前,Apple Silicon 应用只能在 Apple Silicon 硬件上运行,而在撰写这篇博客文章时,这种硬件尚未商业化。如果你有一个开发者过渡套件,可以在上面测试你的应用。否则,你将不得不等待正式的 Apple Silicon 硬件发布,以测试你的应用是否能正常运行。

🌐 Currently, Apple Silicon applications only run on Apple Silicon hardware, which isn't commercially available at the time of writing this blog post. If you have a Developer Transition Kit, you can test your application on that. Otherwise, you'll have to wait for the release of production Apple Silicon hardware to test if your application works.

Rosetta 2 怎么办?

🌐 What about Rosetta 2?

Rosetta 2 是苹果最新版本的 Rosetta 技术,它可以让你在新的 arm64 Apple Silicon 硬件上运行 x64 Intel 应用。虽然我们认为 x64 的 Electron 应用可以在 Rosetta 2 下运行,但有一些重要的事项需要注意(以及你应该发布原生 arm64 二进制文件的原因)。

  • 你的应用性能将大幅降低。Electron / V8 使用 JIT 编译 JavaScript,由于 Rosetta 的工作方式,实际上你会运行两次 JIT(一次在 V8 中,一次在 Rosetta 中)。
  • 你失去了 Apple Silicon 新技术带来的好处,例如更大的内存页面大小。
  • 我们有没有提到过性能将会大幅下降?