Skip to main content

Apple Silicon Support

· 6 min read

Apple Silicon 하드웨어가 올해 말 출시됨에 따라, 여러분의 Electron 앱을 새로운 하드웨어에서 실행하기 위한 방법은 어떻게 될까?


Electron 11.0.0-beta.1 릴리스와 함께, Electron 팀은 Apple이 올해 말 출시할 예정인 새로운 Apple Silicon 하드웨어에서 실행되는 Electron 빌드를 제공하기 시작했다. 최신 베타 버전은 npm install electron@beta 명령어로 설치하거나 릴리스 웹사이트에서 직접 다운로드할 수 있다.

어떻게 동작하나?

Electron 11부터는 인텔 맥과 애플 실리콘 맥을 위한 별도의 Electron 버전을 제공한다. 이 변경 전에는 이미 darwin-x64mas-x64 두 가지 아티팩트를 제공하고 있었는데, 후자는 Mac App Store 호환성을 위한 것이다. 이제 darwin-arm64mas-arm64라는 두 가지 새로운 아티팩트를 추가로 제공하며, 이는 앞서 언급한 아티팩트의 애플 실리콘 버전에 해당한다.

무엇을 해야 하나?

여러분은 앱을 두 가지 버전으로 배포해야 한다. 하나는 x64(Intel Mac)용이고, 다른 하나는 arm64(Apple Silicon)용이다. 다행히도 electron-packager, electron-rebuild, 그리고 electron-forge는 이미 arm64 아키텍처를 지원한다. 이 패키지들의 최신 버전을 사용한다면, 타겟 아키텍처를 arm64로 업데이트한 후 앱이 원활하게 동작할 것이다.

앞으로 arm64x64 앱을 하나의 유니버설 바이너리로 통합할 수 있는 패키지를 출시할 예정이지만, 이 바이너리는 매우 크기 때문에 사용자에게 배포하기에는 적합하지 않을 것이다.

업데이트: 이 패키지는 이제 @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 하드웨어에서만 실행된다. 이 글을 작성하는 시점에서는 상용 Apple Silicon 하드웨어가 출시되지 않았다. Developer Transition Kit이 있다면, 이를 통해 애플리케이션을 테스트할 수 있다. 그렇지 않다면, 상용 Apple Silicon 하드웨어가 출시될 때까지 기다려야 한다. 출시 후에야 애플리케이션이 정상적으로 작동하는지 확인할 수 있다.

Rosetta 2에 대해 알아보자

Rosetta 2는 Apple의 최신 기술로, 새로운 arm64 Apple Silicon 하드웨어에서 x64 Intel 애플리케이션을 실행할 수 있게 해준다. x64 Electron 앱이 Rosetta 2에서 실행될 수는 있지만, 몇 가지 중요한 사항을 주의해야 한다(그리고 왜 네이티브 arm64 바이너리를 제공해야 하는지에 대한 이유도 있다).

  • 앱의 성능이 크게 저하된다. Electron/V8은 JavaScript를 위해 JIT 컴파일을 사용하는데, Rosetta의 작동 방식 때문에 JIT가 두 번 실행된다(V8에서 한 번, Rosetta에서 한 번).
  • Apple Silicon의 새로운 기술 이점을 잃게 된다. 예를 들어, 증가된 메모리 페이지 크기를 활용할 수 없다.
  • 성능이 크게 저하된다는 점을 다시 한 번 강조한다.