Перейти к основному содержанию

Поддержка Silicon Apple

· 3 мин. прочитано

С Apple Silicon аппаратное обеспечение, выпускается позднее в этом году, как выглядит путь для того, чтобы приложение Electron запущено на новом оборудовании?


С выпуском Electron 11.0.0-beta., команда Electron в настоящее время поставляет сборки Electron, которые работают на новом аппаратном обеспечении Apple Silicon, которое Apple планирует осуществлять доставку позднее в этом году. Вы можете получить последнюю бета-версию с npm install electron@beta или загрузить ее непосредственно с нашего сайта релизов.

Как это работает?

Начиная с Electron 11, мы будем отправлять отдельные версии Electron для Intel Macs и Apple Silicon Mac. До этого изменения мы уже были доставлены два артефакта: darwin-x64 и mas-x64, причем последнее использовалось для Mac App Store. Теперь мы доставляем еще два артефакта: darwin-arm64 и mas-arm64, которые являются Apple Silicon эквивалентами вышеупомянутых артефактов.

Что вам нужно сделать?

Вам нужно будет отправить две версии приложения: одну для x64 (Intel Mac) и одну для arm64 (Apple Silicon). Для большинства пользователей это просто, потому "из коробки" поддерживаются electron-packager, electron-rebuildelectron-forge. До тех пор, пока вы используете последние версии этих пакетов, ваше приложение должно работать безупречно, как только вы обновите целевую архитектуру до arm64.


Обновление: Этот пакет теперь доступен на [`@electron/universal`](https://github.com/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.

| Dependency | Version Requirement |
| ------------------- | ------------------- |
| Xcode | `>=12.2.0` |
| `node-gyp` | `>=7.1.0` |
| `electron-rebuild` | `>=1.12.0` |
| `electron-packager` | `>=15.1.0` |

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?

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](https://developer.apple.com/programs/universal/), 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.

## What about Rosetta 2?

Rosetta 2 is Apple's latest iteration of their [Rosetta](https://en.wikipedia.org/wiki/Rosetta_(software)) technology, which allows you to run x64 Intel applications on their new arm64 Apple Silicon hardware. Although we believe that x64 Electron apps will run under Rosetta 2, there are some important things to note (and reasons why you should ship a native arm64 binary).

* Your app's performance will be significantly degraded. Electron / V8 uses [JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation) compilation for JavaScript, and due to how Rosetta works, you will effectively be running JIT twice (once in V8 and once in Rosetta).
* You lose the benefit of new technology in Apple Silicon, such as the increased memory page size.
* Did we mention that the performance will be **significantly** degraded?