Skip to main content

autoUpdater

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

프로세스: Main

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

autoUpdaterEventEmitter이다.

플랫폼별 주의사항

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

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

macOS

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

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

윈도우

윈도우에서는 autoUpdater를 사용하기 전에 사용자의 머신에 앱을 설치해야 한다. 따라서 electron-winstallerElectron 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()을 호출한다.

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