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
EventreleaseNotes
stringreleaseName
stringreleaseDate
DateupdateURL
string
업데이트가 다운로드되면 이 이벤트가 발생한다.
Windows에서는 releaseName
만 사용할 수 있다.
참고: 이 이벤트를 반드시 처리할 필요는 없다. 성공적으로 다운로드된 업데이트는 애플리케이션이 다음에 시작될 때 자동으로 적용된다.
이벤트: 'before-quit-for-update'
이 이벤트는 사용자가 quitAndInstall()
을 호출한 후에 발생한다.
이 API가 호출되면 모든 윈도우가 닫히기 전에 before-quit
이벤트가 발생하지 않는다. 따라서 프로세스가 종료되는 동안 윈도우가 닫히기 전에 특정 작업을 수행하려면 before-quit
이벤트와 함께 이 이벤트도 청취해야 한다.
autoUpdater
객체는 다음과 같은 메서드를 제공한다:
autoUpdater.setFeedURL(options)
url
을 설정하고 자동 업데이터를 초기화한다.
autoUpdater.getFeedURL()
현재 업데이트 피드 URL을 string
타입으로 반환한다.
autoUpdater.checkForUpdates()
서버에 업데이트가 있는지 확인한다. 이 API를 사용하기 전에 반드시 setFeedURL
을 호출해야 한다.
참고: 업데이트가 있다면 자동으로 다운로드된다. autoUpdater.checkForUpdates()
를 두 번 호출하면 업데이트가 두 번 다운로드된다.
autoUpdater.quitAndInstall()
앱을 재시작하고 다운로드된 업데이트를 설치한다. 이 함수는 update-downloaded
이벤트가 발생한 후에만 호출해야 한다.
내부적으로 autoUpdater.quitAndInstall()
을 호출하면 먼저 모든 애플리케이션 윈도우를 닫고, 모든 윈도우가 닫힌 후 자동으로 app.quit()
을 호출한다.
참고: 업데이트를 적용하기 위해 반드시 이 함수를 호출할 필요는 없다. 성공적으로 다운로드된 업데이트는 애플리케이션이 다음 번에 시작될 때 항상 적용된다.