Skip to main content

autoUpdater

앱이 자동으로 업데이트할 수 있도록 지원한다.

프로세스: Main

참고: 앱에서 업데이트를 구현하는 방법에 대한 상세 가이드

autoUpdater는 EventEmitter이다.

플랫폼별 주의사항​

현재 macOS와 Windows만 공식 지원한다. Linux에서는 자동 업데이트 기능이 내장되어 있지 않기 때문에, 배포판의 패키지 관리자를 통해 앱을 업데이트하는 것을 권장한다.

또한 각 플랫폼마다 미묘한 차이가 존재한다:

macOS​

macOS에서 autoUpdater 모듈은 Squirrel.Mac을 기반으로 동작한다. 따라서 특별한 설정 없이도 바로 사용할 수 있다. 서버 측 요구사항은 Server Support에서 확인할 수 있다. 업데이트 과정에서 발생하는 모든 요청에는 App Transport Security (ATS)가 적용된다. ATS를 비활성화해야 하는 경우, 앱의 plist에 NSAllowsArbitraryLoads 키를 추가하면 된다.

참고: macOS에서 자동 업데이트를 사용하려면 애플리케이션에 서명이 되어 있어야 한다. 이는 Squirrel.Mac의 필수 요구사항이다.

윈도우​

윈도우에서는 autoUpdater를 사용하기 전에 사용자의 머신에 앱을 설치해야 한다. 따라서 electron-winstaller나 Electron Forge의 Squirrel.Windows maker를 사용해 윈도우 설치 프로그램을 생성하는 것이 권장된다.

Squirrel.Windows로 빌드된 앱은 커스텀 런치 이벤트를 발생시킨다. 이 이벤트는 Electron 애플리케이션에서 처리해야 하며, 이를 통해 정상적인 설정과 종료 과정을 보장할 수 있다.

Squirrel.Windows 앱은 설치 직후 --squirrel-firstrun 인자와 함께 실행된다. 이때 Squirrel.Windows는 앱에 대한 파일 잠금을 획득하며, 잠금이 해제될 때까지 autoUpdater 요청은 실패한다. 실제로 이는 처음 실행 시 몇 초 동안 업데이트를 확인할 수 없음을 의미한다. 이 문제를 해결하려면 process.argv에 --squirrel-firstrun 플래그가 포함된 경우 업데이트를 확인하지 않거나, 업데이트 확인에 10초의 타임아웃을 설정하는 방법을 사용할 수 있다. 자세한 내용은 electron/electron#7155를 참고한다.

Squirrel.Windows로 생성된 설치 프로그램은 애플리케이션 사용자 모델 ID가 포함된 바로가기 아이콘을 생성한다. 이 ID는 com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE 형식으로, 예를 들어 com.squirrel.slack.Slack이나 com.squirrel.code.Code와 같다. 이 ID를 app.setAppUserModelId API로 앱에 설정해야 하며, 그렇지 않으면 윈도우에서 작업 표시줄에 앱을 제대로 고정할 수 없다.

이벤트​

autoUpdater 객체는 다음과 같은 이벤트를 발생시킨다:

이벤트: 'error'​

반환값:

  • error Error

업데이트 중 오류가 발생했을 때 이벤트가 발생한다.

이벤트: 'checking-for-update'​

이 이벤트는 업데이트가 시작되었는지 확인할 때 발생한다.

이벤트: 'update-available'​

사용 가능한 업데이트가 있을 때 발생하는 이벤트다. 업데이트는 자동으로 다운로드된다.

이벤트: 'update-not-available'​

사용 가능한 업데이트가 없을 때 발생한다.

이벤트: 'update-downloaded'​

반환값:

  • event Event
  • releaseNotes string
  • releaseName string
  • releaseDate Date
  • updateURL string

업데이트가 다운로드되면 이 이벤트가 발생한다.

Windows에서는 releaseName만 사용할 수 있다.

참고: 이 이벤트를 반드시 처리할 필요는 없다. 성공적으로 다운로드된 업데이트는 애플리케이션이 다음에 시작될 때 자동으로 적용된다.

이벤트: 'before-quit-for-update'​

이 이벤트는 사용자가 quitAndInstall()을 호출한 후에 발생한다.

이 API가 호출되면 모든 윈도우가 닫히기 전에 before-quit 이벤트가 발생하지 않는다. 따라서 프로세스가 종료되는 동안 윈도우가 닫히기 전에 특정 작업을 수행하려면 before-quit 이벤트와 함께 이 이벤트도 청취해야 한다.

autoUpdater 객체는 다음과 같은 메서드를 제공한다:

autoUpdater.setFeedURL(options)​

  • options Object
    • url string
    • headers Record<string, string> (optional) macOS - HTTP 요청 헤더.
    • serverType string (optional) macOS - json 또는 default로 설정 가능. 자세한 내용은 Squirrel.Mac README를 참고.

url을 설정하고 자동 업데이터를 초기화한다.

autoUpdater.getFeedURL()​

현재 업데이트 피드 URL을 string 타입으로 반환한다.

autoUpdater.checkForUpdates()​

서버에 업데이트가 있는지 확인한다. 이 API를 사용하기 전에 반드시 setFeedURL을 호출해야 한다.

참고: 업데이트가 있다면 자동으로 다운로드된다. autoUpdater.checkForUpdates()를 두 번 호출하면 업데이트가 두 번 다운로드된다.

autoUpdater.quitAndInstall()​

앱을 재시작하고 다운로드된 업데이트를 설치한다. 이 함수는 update-downloaded 이벤트가 발생한 후에만 호출해야 한다.

내부적으로 autoUpdater.quitAndInstall()을 호출하면 먼저 모든 애플리케이션 윈도우를 닫고, 모든 윈도우가 닫힌 후 자동으로 app.quit()을 호출한다.

참고: 업데이트를 적용하기 위해 반드시 이 함수를 호출할 필요는 없다. 성공적으로 다운로드된 업데이트는 애플리케이션이 다음 번에 시작될 때 항상 적용된다.