Skip to main content

애플리케이션의 이벤트 생명주기를 제어한다.

프로세스: 메인

다음 예제는 마지막 윈도우가 닫힐 때 애플리케이션을 종료하는 방법을 보여준다:

const { app } = require('electron')
app.on('window-all-closed', () => {
app.quit()
})

이벤트

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

이벤트: 'will-finish-launching'

이 이벤트는 애플리케이션이 기본적인 시작 단계를 마쳤을 때 발생한다. 윈도우와 리눅스에서는 will-finish-launching 이벤트가 ready 이벤트와 동일하다. macOS에서는 이 이벤트가 NSApplicationapplicationWillFinishLaunching 알림에 해당한다.

대부분의 경우, 모든 작업은 ready 이벤트 핸들러에서 처리하는 것이 좋다.

이벤트: 'ready'

반환값:

Electron이 초기화를 완료하면 한 번 발생하는 이벤트다. macOS에서는 launchInfoNSUserNotificationuserInfo 또는 UNNotificationResponse 정보가 포함된다. 이 정보는 애플리케이션이 Notification Center에서 실행되었을 때 사용된다. app.isReady()를 호출해 이 이벤트가 이미 발생했는지 확인할 수 있으며, app.whenReady()를 호출하면 Electron이 초기화될 때 이행되는 Promise를 얻을 수 있다.

참고: ready 이벤트는 메인 프로세스가 이벤트 루프의 첫 틱을 실행한 후에만 발생한다. ready 이벤트 전에 Electron API를 호출해야 한다면, 메인 프로세스의 최상위 컨텍스트에서 동기적으로 호출해야 한다.

이벤트: 'window-all-closed'

이 이벤트는 모든 윈도우가 닫혔을 때 발생한다.

이 이벤트를 구독하지 않고 모든 윈도우가 닫히면, 앱은 기본적으로 종료된다. 하지만 이 이벤트를 구독하면 앱의 종료 여부를 직접 제어할 수 있다. 만약 사용자가 Cmd + Q를 누르거나 개발자가 app.quit()를 호출한 경우, Electron은 먼저 모든 윈도우를 닫은 후 will-quit 이벤트를 발생시키며, 이 경우 window-all-closed 이벤트는 발생하지 않는다.

이벤트: 'before-quit'

반환값:

  • event Event

애플리케이션이 윈도우를 닫기 시작하기 전에 발생한다. event.preventDefault()를 호출하면 애플리케이션을 종료하는 기본 동작을 막을 수 있다.

참고: autoUpdater.quitAndInstall()로 인해 애플리케이션 종료가 시작된 경우, before-quit 이벤트는 모든 윈도우에서 close 이벤트를 발생시키고 윈도우를 닫은 후에 발생한다.

참고: Windows에서 시스템 종료/재시작 또는 사용자 로그아웃으로 인해 애플리케이션이 종료되는 경우, 이 이벤트는 발생하지 않는다.

이벤트: 'will-quit'

반환값:

  • event Event

모든 윈도우가 닫히고 애플리케이션이 종료될 때 발생한다. event.preventDefault()를 호출하면 애플리케이션을 종료하는 기본 동작을 막을 수 있다.

will-quit 이벤트와 window-all-closed 이벤트의 차이점은 window-all-closed 이벤트 설명을 참고한다.

참고: 윈도우에서 시스템 종료/재시작 또는 사용자 로그아웃으로 인해 애플리케이션이 종료되는 경우, 이 이벤트는 발생하지 않는다.

이벤트: 'quit'

반환값:

  • event Event
  • exitCode Integer

이 이벤트는 애플리케이션이 종료될 때 발생한다.

참고: 윈도우 환경에서는 시스템 종료/재시작 또는 사용자 로그아웃으로 인해 앱이 종료되는 경우 이 이벤트가 발생하지 않는다.

이벤트: 'open-file' macOS

반환값:

  • event Event
  • path string

사용자가 애플리케이션으로 파일을 열고자 할 때 발생한다. open-file 이벤트는 일반적으로 애플리케이션이 이미 실행 중일 때, 운영체제가 해당 애플리케이션을 재사용하여 파일을 열려고 할 때 발생한다. 또한, 파일을 도크에 드롭했을 때 애플리케이션이 아직 실행되지 않은 경우에도 open-file 이벤트가 발생한다. 이런 상황을 처리하려면 애플리케이션 시작 시 매우 초기 단계에서 open-file 이벤트를 수신해야 한다(ready 이벤트가 발생하기 전에도).

이 이벤트를 직접 처리하려면 event.preventDefault()를 호출해야 한다.

Windows에서는 파일 경로를 얻기 위해 메인 프로세스에서 process.argv를 파싱해야 한다.

이벤트: 'open-url' macOS

반환값:

  • event Event
  • url string

사용자가 애플리케이션으로 URL을 열려고 할 때 발생한다. 애플리케이션의 Info.plist 파일은 CFBundleURLTypes 키 내에 URL 스키마를 정의하고, NSPrincipalClassAtomApplication으로 설정해야 한다.

open-file 이벤트와 마찬가지로, 애플리케이션 시작 초기에 open-url 이벤트 리스너를 등록해야 URL 처리로 애플리케이션이 열릴 때 이를 감지할 수 있다. ready 이벤트에 대한 응답으로 리스너를 등록하면, 애플리케이션을 실행시키는 URL을 놓치게 된다.

이벤트: 'activate' macOS

반환값:

  • event Event
  • hasVisibleWindows boolean

이 이벤트는 애플리케이션이 활성화될 때 발생한다. 애플리케이션을 처음 실행하거나, 이미 실행 중인 애플리케이션을 다시 실행하려고 시도하거나, 애플리케이션의 도크(Dock) 또는 작업 표시줄 아이콘을 클릭하는 등 다양한 동작이 이 이벤트를 트리거할 수 있다.

이벤트: 'did-become-active' macOS

반환값:

  • event Event

이 이벤트는 애플리케이션이 활성화될 때마다 발생한다. activate 이벤트와 달리, did-become-active는 Dock 아이콘을 클릭하거나 애플리케이션을 다시 실행할 때뿐만 아니라, 매번 앱이 활성화될 때마다 발생한다. 또한 사용자가 macOS 앱 스위처를 통해 앱으로 전환할 때도 이 이벤트가 발생한다.

이벤트: 'did-resign-active' macOS

반환값:

  • event 이벤트

이 이벤트는 앱이 활성 상태를 잃고 포커스를 갖지 못할 때 발생한다. 예를 들어, 다른 애플리케이션을 클릭하거나 macOS 앱 스위처를 사용해 다른 애플리케이션으로 전환할 때 이 이벤트가 트리거될 수 있다.

이벤트: 'continue-activity' macOS

반환값:

  • event Event
  • type string - 활동을 식별하는 문자열. [NSUserActivity.activityType][activity-type]에 매핑된다.
  • userInfo unknown - 다른 기기에서 활동에 의해 저장된 앱별 상태 정보를 포함한다.
  • details Object
    • webpageURL string (선택 사항) - 다른 기기에서 접근한 웹페이지의 URL을 식별하는 문자열. 사용 가능한 경우에만 제공된다.

[Handoff][handoff] 중에 다른 기기에서 시작된 활동을 재개하려고 할 때 발생한다. 이 이벤트를 직접 처리하려면 event.preventDefault()를 호출해야 한다.

사용자 활동은 해당 활동의 소스 앱과 동일한 개발자 팀 ID를 가지고 있으며, 활동 타입을 지원하는 앱에서만 계속할 수 있다. 지원되는 활동 타입은 앱의 Info.plist 파일에서 NSUserActivityTypes 키 아래에 지정된다.

이벤트: 'will-continue-activity' macOS

반환 값:

  • event Event
  • type string - 활동을 식별하는 문자열. [NSUserActivity.activityType][activity-type]에 매핑된다.

[Handoff][handoff] 과정에서 다른 기기의 활동이 재개되려고 할 때 발생한다. 이 이벤트를 직접 처리하려면 event.preventDefault()를 호출해야 한다.

이벤트: 'continue-activity-error' macOS

반환값:

  • event Event
  • type string - 활동을 식별하는 문자열. [NSUserActivity.activityType][activity-type]에 매핑된다.
  • error string - 오류의 지역화된 설명을 담은 문자열.

[Handoff][handoff] 과정에서 다른 기기의 활동을 재개하려고 시도했지만 실패했을 때 발생한다.

이벤트: 'activity-was-continued' macOS

반환값:

  • event Event
  • type string - 활동을 식별하는 문자열. [NSUserActivity.activityType][activity-type]에 매핑된다.
  • userInfo unknown - 활동에 의해 저장된 앱별 상태 정보를 포함한다.

이 이벤트는 [Handoff][handoff] 과정에서 현재 기기의 활동이 다른 기기에서 성공적으로 재개되었을 때 발생한다.

이벤트: 'update-activity-state' macOS

반환값:

  • event Event
  • type string - 활동을 식별하는 문자열. [NSUserActivity.activityType][activity-type]에 매핑된다.
  • userInfo unknown - 앱별 상태를 포함하며, 활동에 의해 저장된다.

[Handoff][handoff]가 다른 기기에서 재개되기 직전에 발생하는 이벤트이다. 전송될 상태를 업데이트해야 한다면, event.preventDefault()를 즉시 호출하고 새로운 userInfo 딕셔너리를 구성한 후, 적시에 app.updateCurrentActivity()를 호출해야 한다. 그렇지 않으면 작업이 실패하고 continue-activity-error가 호출된다.

이벤트: 'new-window-for-tab' macOS

반환값:

  • event Event

사용자가 macOS의 기본 새 탭 버튼을 클릭할 때 발생하는 이벤트. 현재 BrowserWindowtabbingIdentifier를 가지고 있을 때만 새 탭 버튼이 보인다.

이벤트: 'browser-window-blur'

반환값:

BrowserWindow가 포커스를 잃을 때 발생한다.

이벤트: 'browser-window-focus'

반환값:

이 이벤트는 BrowserWindow가 포커스를 받을 때 발생한다.

이벤트: 'browser-window-created'

반환값:

새로운 BrowserWindow가 생성될 때 발생한다.

이벤트: 'web-contents-created'

반환값:

새로운 webContents가 생성될 때 발생한다.

이벤트: 'certificate-error'

반환값:

  • event Event
  • webContents WebContents
  • url string
  • error string - 오류 코드
  • certificate Certificate
  • callback Function
    • isTrusted boolean - 인증서를 신뢰할지 여부
  • isMainFrame boolean

url에 대한 certificate 검증에 실패했을 때 발생한다. 인증서를 신뢰하려면 event.preventDefault()로 기본 동작을 막고 callback(true)를 호출해야 한다.

const { app } = require('electron')

app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
if (url === 'https://github.com') {
// 검증 로직
event.preventDefault()
callback(true)
} else {
callback(false)
}
})

이벤트: 'select-client-certificate'

반환 값:

클라이언트 인증서 요청이 발생할 때 이 이벤트가 발생한다.

url은 클라이언트 인증서를 요청하는 네비게이션 항목에 해당하며, callback은 목록에서 필터링된 항목으로 호출할 수 있다. event.preventDefault()를 사용하면 애플리케이션이 저장소의 첫 번째 인증서를 사용하지 못하도록 방지한다.

const { app } = require('electron')

app.on('select-client-certificate', (event, webContents, url, list, callback) => {
event.preventDefault()
callback(list[0])
})

이벤트: 'login'

반환값:

  • event Event
  • webContents WebContents (선택 사항)
  • authenticationResponseDetails Object
    • url URL
    • pid number
  • authInfo Object
    • isProxy boolean
    • scheme string
    • host string
    • port Integer
    • realm string
  • callback Function
    • username string (선택 사항)
    • password string (선택 사항)

webContents 또는 Utility process가 기본 인증을 시도할 때 발생한다.

기본 동작은 모든 인증 요청을 취소하는 것이다. 이 동작을 재정의하려면 event.preventDefault()를 호출해 기본 동작을 막고, callback(username, password)에 인증 정보를 전달해야 한다.

const { app } = require('electron')

app.on('login', (event, webContents, details, authInfo, callback) => {
event.preventDefault()
callback('username', 'secret')
})

callback이 사용자 이름이나 비밀번호 없이 호출되면, 인증 요청이 취소되고 인증 오류가 페이지로 반환된다.

이벤트: 'gpu-info-update'

GPU 정보가 업데이트될 때마다 발생한다.

이벤트: 'render-process-gone'

반환값:

렌더러 프로세스가 예기치 않게 종료될 때 발생한다. 일반적으로 프로세스가 충돌하거나 강제 종료된 경우에 이 이벤트가 발생한다.

이벤트: 'child-process-gone'

반환값:

  • event Event
  • details Object
    • type string - 프로세스 타입. 다음 값 중 하나:
      • Utility
      • Zygote
      • Sandbox helper
      • GPU
      • Pepper Plugin
      • Pepper Plugin Broker
      • Unknown
    • reason string - 자식 프로세스가 종료된 이유. 가능한 값:
      • clean-exit - 프로세스가 종료 코드 0으로 정상 종료됨
      • abnormal-exit - 프로세스가 0이 아닌 종료 코드로 비정상 종료됨
      • killed - 프로세스가 SIGTERM 신호를 받거나 외부적으로 강제 종료됨
      • crashed - 프로세스가 크래시됨
      • oom - 프로세스가 메모리 부족으로 종료됨
      • launch-failed - 프로세스가 성공적으로 시작되지 못함
      • integrity-failure - 윈도우 코드 무결성 검사 실패
    • exitCode number - 프로세스의 종료 코드 (예: POSIX에서는 waitpid의 상태, 윈도우에서는 GetExitCodeProcess의 결과).
    • serviceName string (선택 사항) - 프로세스의 비지역화된 이름.
    • name string (선택 사항) - 프로세스의 이름. 예: 유틸리티의 경우 Audio Service, Content Decryption Module Service, Network Service, Video Capture 등.

자식 프로세스가 예기치 않게 사라질 때 발생한다. 일반적으로 크래시되거나 강제 종료된 경우에 해당한다. 렌더러 프로세스는 포함되지 않는다.

이벤트: 'accessibility-support-changed' macOS Windows

반환값:

  • event Event
  • accessibilitySupportEnabled boolean - Chrome의 접근성 지원이 활성화된 경우 true, 그렇지 않으면 false

Chrome의 접근성 지원 상태가 변경될 때 발생한다. 이 이벤트는 스크린 리더와 같은 보조 기술이 활성화되거나 비활성화될 때 트리거된다. 자세한 내용은 https://www.chromium.org/developers/design-documents/accessibility 를 참고한다.

이벤트: 'session-created'

반환값:

Electron이 새로운 session을 생성할 때 발생하는 이벤트이다.

const { app } = require('electron')

app.on('session-created', (session) => {
console.log(session)
})

이벤트: 'second-instance'

반환값:

  • event Event
  • argv string[] - 두 번째 인스턴스의 커맨드라인 인자 배열
  • workingDirectory string - 두 번째 인스턴스의 작업 디렉토리
  • additionalData unknown - 두 번째 인스턴스에서 전달된 추가 데이터의 JSON 객체

이 이벤트는 애플리케이션의 두 번째 인스턴스가 실행되고 app.requestSingleInstanceLock()을 호출할 때, 기본 인스턴스 내에서 발생한다.

argv는 두 번째 인스턴스의 커맨드라인 인자 배열이고, workingDirectory는 해당 인스턴스의 현재 작업 디렉토리다. 일반적으로 애플리케이션은 이 이벤트에 반응하여 기본 윈도우를 포커스하고 최소화 상태를 해제한다.

참고: argv는 두 번째 인스턴스에 전달된 인자 목록과 정확히 동일하지 않을 수 있다. 인자의 순서가 바뀌거나 추가 인자가 포함될 수 있다. 정확한 인자 목록이 필요하다면, additionalData를 사용하는 것이 좋다.

참고: 두 번째 인스턴스가 첫 번째 인스턴스와 다른 사용자에 의해 시작된 경우, argv 배열에 인자가 포함되지 않을 수 있다.

이 이벤트는 appready 이벤트가 발생한 후에 반드시 발생한다.

참고: Chromium에 의해 추가적인 커맨드라인 인자(예: --original-process-start-time)가 포함될 수 있다.

메서드

app 객체는 다음과 같은 메서드를 제공한다.

참고: 일부 메서드는 특정 운영체제에서만 사용할 수 있으며, 해당 메서드는 별도로 표시했다.

app.quit()

모든 윈도우를 닫으려고 시도한다. 먼저 before-quit 이벤트가 발생한다. 모든 윈도우가 성공적으로 닫히면 will-quit 이벤트가 발생하며, 기본적으로 애플리케이션이 종료된다.

이 메서드는 모든 beforeunloadunload 이벤트 핸들러가 올바르게 실행되도록 보장한다. 윈도우가 beforeunload 이벤트 핸들러에서 false를 반환하여 종료를 취소할 수도 있다.

app.exit([exitCode])

  • exitCode Integer (선택 사항)

exitCode를 지정하여 즉시 애플리케이션을 종료한다. exitCode를 생략할 경우 기본값은 0이다.

모든 윈도우는 사용자에게 묻지 않고 즉시 닫히며, before-quitwill-quit 이벤트는 발생하지 않는다.

app.relaunch([options])

  • options Object (선택 사항)
    • args string[] (선택 사항)
    • execPath string (선택 사항)

현재 인스턴스가 종료될 때 앱을 다시 실행한다.

기본적으로 새 인스턴스는 현재 인스턴스와 동일한 작업 디렉토리와 커맨드라인 인자를 사용한다. args를 지정하면 해당 인자가 새 인스턴스의 커맨드라인 인자로 전달된다. execPath를 지정하면 현재 앱 대신 지정된 execPath가 실행된다.

이 메서드는 실행 시 앱을 종료하지 않는다. 앱을 재시작하려면 app.relaunch를 호출한 후 app.quit 또는 app.exit를 호출해야 한다.

app.relaunch를 여러 번 호출하면 현재 인스턴스가 종료된 후 여러 인스턴스가 시작된다.

현재 인스턴스를 즉시 재시작하고 새 인스턴스에 커맨드라인 인자를 추가하는 예제:

const { app } = require('electron')

app.relaunch({ args: process.argv.slice(1).concat(['--relaunch']) })
app.exit(0)

app.isReady()

boolean 타입을 반환한다. Electron 초기화가 완료되면 true, 그렇지 않으면 false를 반환한다.
참고: app.whenReady()도 함께 확인해 보는 것이 좋다.

app.whenReady()

Promise<void>를 반환한다. 이 Promise는 Electron이 초기화되면 이행된다. 앱이 아직 준비되지 않았을 때 app.isReady()를 확인하거나 ready 이벤트를 구독하는 편리한 대안으로 사용할 수 있다.

app.focus([options])

  • options Object (선택 사항)
    • steal boolean macOS - 다른 앱이 현재 활성화된 상태에서도 이 앱을 활성 상태로 만든다.

Linux에서는 첫 번째 보이는 윈도우에 포커스를 맞춘다. macOS에서는 애플리케이션을 활성 앱으로 만든다. Windows에서는 애플리케이션의 첫 번째 윈도우에 포커스를 맞춘다.

steal 옵션은 최소한으로 사용하는 것이 좋다.

app.hide() macOS

애플리케이션의 모든 윈도우를 최소화하지 않고 숨긴다.

app.isHidden() macOS

boolean 값을 반환한다. 애플리케이션과 모든 윈도우가 숨겨져 있는 경우(예: Command-H를 사용한 경우) true를 반환하고, 그렇지 않으면 false를 반환한다.

app.show() macOS

윈도우를 숨긴 후 다시 보여준다. 자동으로 포커스하지는 않는다.

app.setAppLogsPath([path])

  • path string (선택 사항) - 로그를 저장할 커스텀 경로. 절대 경로여야 한다.

앱의 로그 디렉토리를 설정하거나 생성한다. 이 디렉토리는 이후 app.getPath()app.setPath(pathName, newPath)로 조작할 수 있다.

path 매개변수 없이 app.setAppLogsPath()를 호출하면 _macOS_에서는 ~/Library/Logs/YourAppName으로, _Linux_와 _Windows_에서는 userData 디렉토리 내부로 설정된다.

app.getAppPath()

string 타입의 현재 애플리케이션 디렉터리를 반환한다.

app.getPath(name)

  • name string - 다음 경로 이름을 요청할 수 있다:
    • home 사용자의 홈 디렉토리.
    • appData 사용자별 애플리케이션 데이터 디렉토리로, 기본값은 다음과 같다:
      • Windows에서는 %APPDATA%
      • Linux에서는 $XDG_CONFIG_HOME 또는 ~/.config
      • macOS에서는 ~/Library/Application Support
    • userData 앱의 설정 파일을 저장하는 디렉토리로, 기본적으로 appData 디렉토리에 앱 이름이 추가된 경로이다. 사용자 데이터를 저장하는 파일은 이 디렉토리에 작성하는 것이 일반적이며, 일부 환경에서는 이 디렉토리를 클라우드 스토리지에 백업할 수 있으므로 큰 파일을 여기에 저장하지 않는 것이 좋다.
    • sessionData Session에 의해 생성된 데이터를 저장하는 디렉토리로, localStorage, 쿠키, 디스크 캐시, 다운로드된 사전, 네트워크 상태, 개발자 도구 파일 등이 포함된다. 기본적으로 userData를 가리킨다. Chromium은 매우 큰 디스크 캐시를 여기에 작성할 수 있으므로, 앱이 localStorage나 쿠키와 같은 브라우저 저장소를 사용하지 않는 경우 이 디렉토리를 다른 위치로 설정하여 userData 디렉토리를 오염시키지 않는 것이 좋다.
    • temp 임시 디렉토리.
    • exe 현재 실행 파일.
    • module libchromiumcontent 라이브러리.
    • desktop 현재 사용자의 데스크톱 디렉토리.
    • documents 사용자의 "내 문서" 디렉토리.
    • downloads 사용자의 다운로드 디렉토리.
    • music 사용자의 음악 디렉토리.
    • pictures 사용자의 사진 디렉토리.
    • videos 사용자의 비디오 디렉토리.
    • recent 사용자의 최근 파일 디렉토리 (Windows 전용).
    • logs 앱의 로그 폴더 디렉토리.
    • crashDumps 크래시 덤프가 저장되는 디렉토리.

string을 반환한다 - name과 관련된 특수 디렉토리나 파일의 경로이다. 실패할 경우 Error가 발생한다.

app.setAppLogsPath()를 먼저 호출하지 않고 app.getPath('logs')를 호출하면, path 매개변수 없이 app.setAppLogsPath()를 호출한 것과 동일한 기본 로그 디렉토리가 생성된다.

app.getFileIcon(path[, options])

  • path string
  • options Object (선택 사항)
    • size string
      • small - 16x16
      • normal - 32x32
      • large - _Linux_에서 48x48, _Windows_에서 32x32, _macOS_에서는 지원되지 않음.

Promise<NativeImage>를 반환한다. 이 Promise는 NativeImage인 앱의 아이콘으로 이행된다.

주어진 경로와 연관된 아이콘을 가져온다.

_Windows_에서는 두 가지 유형의 아이콘이 있다:

  • .mp3, .png 등 특정 파일 확장자와 연관된 아이콘
  • .exe, .dll, .ico처럼 파일 자체에 포함된 아이콘

_Linux_와 _macOS_에서는 파일의 MIME 타입과 연관된 애플리케이션에 따라 아이콘이 결정된다.

app.setPath(name, path)

  • name string
  • path string

name과 연관된 특정 디렉터리나 파일의 path를 재정의한다.
지정한 경로가 존재하지 않는 디렉터리라면 Error가 발생한다.
이 경우, fs.mkdirSync나 유사한 방법으로 디렉터리를 생성해야 한다.

app.getPath에 정의된 name의 경로만 재정의할 수 있다.

기본적으로 웹 페이지의 쿠키와 캐시는 sessionData 디렉터리에 저장된다.
이 위치를 변경하려면 app 모듈의 ready 이벤트가 발생하기 전에 sessionData 경로를 재정의해야 한다.

app.getVersion()

string 타입을 반환한다. 이 메서드는 로드된 애플리케이션의 버전을 반환한다. 애플리케이션의 package.json 파일에 버전 정보가 없을 경우, 현재 번들 또는 실행 파일의 버전을 반환한다.

app.getName()

string 타입을 반환한다. 현재 애플리케이션의 이름을 나타내며, 이 값은 애플리케이션의 package.json 파일에 정의된 이름이다.

일반적으로 package.json 파일의 name 필드는 npm 모듈 스펙에 따라 짧고 소문자로 이루어진 이름이다. 보통 productName 필드도 함께 지정하는데, 이 필드는 애플리케이션의 전체 이름을 대문자로 표기하며, Electron에서는 name 필드보다 우선적으로 사용된다.

app.setName(name)

  • name string

현재 애플리케이션의 이름을 재정의한다.

참고: 이 함수는 Electron이 내부적으로 사용하는 이름을 재정의한다. 운영체제에서 사용하는 이름에는 영향을 미치지 않는다.

app.getLocale()

string 타입의 값을 반환한다. 이 값은 Chromium의 l10n_util 라이브러리를 사용해 가져온 현재 애플리케이션의 로케일이다. 가능한 반환 값은 여기에서 확인할 수 있다.

로케일을 설정하려면 앱 시작 시 커맨드라인 스위치를 사용해야 한다. 관련 정보는 여기에서 찾을 수 있다.

참고: 패키징된 앱을 배포할 때는 locales 폴더도 함께 포함해야 한다.

참고: 이 API는 ready 이벤트가 발생한 이후에 호출해야 한다.

참고: 이 API의 반환 값과 다른 로케일 및 언어 API의 반환 값을 비교한 예제는 app.getPreferredSystemLanguages()에서 확인할 수 있다.

app.getLocaleCountryCode()

string 타입을 반환한다. 사용자 운영체제의 로케일을 기반으로 한 두 글자 ISO 3166 국가 코드를 제공한다. 이 값은 네이티브 OS API에서 가져온다.

참고: 로케일 국가 코드를 감지할 수 없는 경우, 빈 문자열을 반환한다.

app.getSystemLocale()

string을 반환한다. 이 함수는 현재 시스템 로케일을 가져온다. Windows와 Linux에서는 Chromium의 i18n 라이브러리를 사용해 로케일을 가져오며, macOS에서는 [NSLocale currentLocale]을 사용한다. 사용자의 현재 시스템 언어를 가져오려면 app.getPreferredSystemLanguages()를 사용하는 것이 더 적합하다. 로케일과 언어가 항상 일치하지는 않기 때문이다.

각 운영체제는 지역 데이터를 다르게 활용한다:

  • Windows 11은 숫자, 날짜, 시간의 형식을 지역 설정에 따라 결정한다.
  • macOS Monterey는 숫자, 날짜, 시간의 형식과 함께 사용할 통화 기호를 지역 설정에 따라 선택한다.

따라서 이 API는 캘린더 앱에서 날짜와 시간을 렌더링할 형식을 선택하는 등, 개발자가 OS와 일관된 형식을 사용하려는 경우에 유용하다.

참고: 이 API는 ready 이벤트가 발생한 후에 호출해야 한다.

참고: 이 API와 다른 로케일 및 언어 API의 반환값을 비교한 예제는 app.getPreferredSystemLanguages()를 참고한다.

app.getPreferredSystemLanguages()

string[] 타입의 값을 반환한다. 이 값은 사용자가 선호하는 시스템 언어를 가장 선호하는 순서부터 가장 낮은 순서까지 포함한다. 필요할 경우 국가 코드도 함께 반환한다. 사용자는 Windows나 macOS의 언어 및 지역 설정을 통해 이 목록을 수정하거나 추가할 수 있다.

이 API는 Windows에서는 GlobalizationPreferences를 사용하며, GetSystemPreferredUILanguages로 대체될 수 있다. macOS에서는 [NSLocale preferredLanguages]를, Linux에서는 g_get_language_names를 사용한다.

이 API는 애플리케이션을 어떤 언어로 표시할지 결정하는 등의 목적으로 활용할 수 있다.

다음은 다양한 언어 및 로케일 API의 반환값 예제이다. 각각의 설정에 따라 다른 결과를 보여준다.

Windows에서 애플리케이션 로케일이 독일어로 설정되고, 지역 형식은 핀란드(핀란드)로 설정되었으며, 가장 선호하는 시스템 언어부터 가장 낮은 순서로 프랑스어(캐나다), 영어(미국), 간체 중국어(중국), 핀란드어, 스페인어(라틴 아메리카)인 경우:

app.getLocale() // 'de'
app.getSystemLocale() // 'fi-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-CN', 'fi', 'es-419']

macOS에서 애플리케이션 로케일이 독일어로 설정되고, 지역이 핀란드로 설정되었으며, 가장 선호하는 시스템 언어부터 가장 낮은 순서로 프랑스어(캐나다), 영어(미국), 간체 중국어, 스페인어(라틴 아메리카)인 경우:

app.getLocale() // 'de'
app.getSystemLocale() // 'fr-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-FI', 'es-419']

두 운영체제 간에는 사용 가능한 언어와 지역, 그리고 가능한 반환값이 다르다.

위 예제에서 볼 수 있듯이, Windows에서는 선호하는 시스템 언어에 국가 코드가 없을 수도 있고, 선호하는 시스템 언어 중 하나가 지역 형식에 사용되는 언어와 일치할 수도 있다. macOS에서는 지역이 기본 국가 코드 역할을 한다. 사용자가 핀란드어를 선호 언어로 설정하지 않아도 핀란드를 지역으로 사용할 수 있으며, 언어 이름에 연관된 국가가 없는 선호 시스템 언어에는 FI 국가 코드가 사용된다.

app.addRecentDocument(path) macOS Windows

  • path string

path를 최근 문서 목록에 추가한다.

이 목록은 운영체제(OS)가 관리한다. 윈도우에서는 작업 표시줄에서, macOS에서는 독(Dock) 메뉴에서 이 목록을 확인할 수 있다.

app.clearRecentDocuments() macOS Windows

최근 문서 목록을 지운다.

app.setAsDefaultProtocolClient(protocol[, path, args])

  • protocol string - ://을 제외한 프로토콜 이름. 예를 들어, 앱이 electron:// 링크를 처리하도록 하려면 이 메서드를 electron을 인자로 호출한다.
  • path string (선택 사항) Windows - Electron 실행 파일의 경로. 기본값은 process.execPath이다.
  • args string[] (선택 사항) Windows - 실행 파일에 전달할 인자. 기본값은 빈 배열이다.

반환값 boolean - 호출이 성공했는지 여부.

현재 실행 파일을 특정 프로토콜(URI 스키마)의 기본 핸들러로 설정한다. 이 기능을 통해 앱을 운영체제에 더 깊이 통합할 수 있다. 등록되면 your-protocol:// 링크가 현재 실행 파일로 열리며, 프로토콜을 포함한 전체 링크가 앱에 인자로 전달된다.

참고: macOS에서는 앱의 info.plist에 추가된 프로토콜만 등록할 수 있으며, 이 파일은 런타임에 수정할 수 없다. 그러나 [Electron Forge][electron-forge], [Electron Packager][electron-packager]를 사용하거나 텍스트 편집기로 info.plist를 수정하여 빌드 시점에 파일을 변경할 수 있다. 자세한 내용은 [Apple의 문서][CFBundleURLTypes]를 참고한다.

참고: Windows Store 환경(앱이 appx로 패키징된 경우)에서는 이 API가 모든 호출에 대해 true를 반환하지만, 설정한 레지스트리 키는 다른 애플리케이션에서 접근할 수 없다. Windows Store 애플리케이션을 기본 프로토콜 핸들러로 등록하려면 매니페스트에 프로토콜을 선언해야 한다.

이 API는 내부적으로 Windows 레지스트리와 LSSetDefaultHandlerForURLScheme을 사용한다.

app.removeAsDefaultProtocolClient(protocol[, path, args]) macOS Windows

  • protocol string - ://를 제외한 프로토콜 이름.
  • path string (선택 사항) Windows - 기본값은 process.execPath
  • args string[] (선택 사항) Windows - 기본값은 빈 배열

반환값 boolean - 호출이 성공했는지 여부.

이 메서드는 현재 실행 파일이 특정 프로토콜(URI 스킴)의 기본 핸들러로 설정되어 있는지 확인한다. 만약 그렇다면, 앱을 기본 핸들러에서 제거한다.

app.isDefaultProtocolClient(protocol[, path, args])

  • protocol string - :// 없이 프로토콜 이름을 지정한다.
  • path string (선택 사항) Windows - 기본값은 process.execPath
  • args string[] (선택 사항) Windows - 기본값은 빈 배열

boolean을 반환한다. 현재 실행 파일이 프로토콜(또는 URI 스킴)의 기본 핸들러로 등록되어 있는지 여부를 확인한다.

참고: macOS에서는 이 메서드를 사용해 앱이 특정 프로토콜의 기본 핸들러로 등록되었는지 확인할 수 있다. macOS 시스템에서 ~/Library/Preferences/com.apple.LaunchServices.plist 파일을 직접 확인해도 동일한 정보를 얻을 수 있다. 자세한 내용은 [Apple의 공식 문서][LSCopyDefaultHandlerForURLScheme]를 참고한다.

이 API는 내부적으로 Windows 레지스트리와 LSCopyDefaultHandlerForURLScheme을 사용한다.

app.getApplicationNameForProtocol(url)

  • url string - 프로토콜 이름을 확인할 URL. 이 메서드는 ://를 포함한 전체 URL을 받는다. 예를 들어 https://와 같은 형식이다.

반환값 string - 프로토콜을 처리하는 애플리케이션의 이름. 처리기가 없으면 빈 문자열을 반환한다. 예를 들어, URL의 기본 처리기가 Electron이라면, Windows와 Mac에서는 Electron이 반환될 수 있다. 하지만 정확한 형식은 보장되지 않으므로 이를 의존해서는 안 된다. Linux에서는 .desktop 접미사가 붙은 다른 형식이 반환될 수 있다.

이 메서드는 URL의 프로토콜(URI 스키마)에 대한 기본 처리기의 애플리케이션 이름을 반환한다.

app.getApplicationInfoForProtocol(url) macOS Windows

  • url string - 확인할 프로토콜 이름이 포함된 URL. 이 메서드는 ://를 포함한 전체 URL을 인자로 받는다 (예: https://).

Promise<Object>를 반환하며, 다음 정보를 포함하는 객체로 resolve된다:

  • icon NativeImage - 프로토콜을 처리하는 앱의 아이콘.
  • path string - 프로토콜을 처리하는 앱의 설치 경로.
  • name string - 프로토콜을 처리하는 앱의 표시 이름.

이 메서드는 URL의 프로토콜(URI 스킴)을 기본적으로 처리하는 애플리케이션의 이름, 아이콘, 경로를 포함하는 Promise를 반환한다.

app.setUserTasks(tasks) Windows

  • tasks Task[] - Task 객체의 배열

윈도우의 점프 리스트(Jump List)에 있는 [Tasks][tasks] 카테고리에 tasks를 추가한다.

tasksTask 객체의 배열이다.

반환값: boolean - 호출이 성공했는지 여부

참고: 점프 리스트를 더욱 세부적으로 커스터마이즈하고 싶다면 app.setJumpList(categories)를 대신 사용한다.

app.getJumpListSettings() Windows

객체를 반환한다:

  • minItems Integer - 점프 목록에 표시될 최소 아이템 수. 이 값에 대한 자세한 설명은 [MSDN 문서][JumpListBeginListMSDN]를 참고한다.
  • removedItems JumpListItem[] - 사용자가 점프 목록의 커스텀 카테고리에서 명시적으로 제거한 아이템에 해당하는 JumpListItem 객체 배열. 이 아이템들은 다음 app.setJumpList() 호출에서 점프 목록에 다시 추가해서는 안 된다. 윈도우는 제거된 아이템을 포함하는 커스텀 카테고리를 표시하지 않는다.

app.setJumpList(categories) Windows

반환값: string

애플리케이션에 커스텀 점프 목록을 설정하거나 제거한다. 이 메서드는 다음 문자열 중 하나를 반환한다:

  • ok - 문제가 없음
  • error - 하나 이상의 오류가 발생했으며, 런타임 로깅을 활성화해 원인을 파악할 수 있음
  • invalidSeparatorError - 점프 목록의 커스텀 카테고리에 구분자를 추가하려고 시도했음. 구분자는 표준 Tasks 카테고리에서만 허용됨
  • fileTypeRegistrationError - 애플리케이션이 처리할 수 없는 파일 타입의 링크를 점프 목록에 추가하려고 시도했음
  • customCategoryAccessDeniedError - 사용자 개인정보 보호 정책이나 그룹 정책 설정으로 인해 커스텀 카테고리를 점프 목록에 추가할 수 없음

categoriesnull인 경우, 이전에 설정된 커스텀 점프 목록(존재한다면)이 애플리케이션의 표준 점프 목록(Windows에서 관리)으로 대체된다.

참고: JumpListCategory 객체에 typename 속성이 모두 설정되지 않은 경우, typetasks로 간주된다. name 속성은 설정되었지만 type 속성이 생략된 경우, typecustom으로 간주된다.

참고: 사용자는 커스텀 카테고리에서 항목을 제거할 수 있으며, Windows는 제거된 항목을 다음 성공적인 app.setJumpList(categories) 호출 이후까지 커스텀 카테고리에 다시 추가하지 못하도록 한다. 그 이전에 제거된 항목을 다시 추가하려고 시도하면, 해당 커스텀 카테고리가 점프 목록에서 완전히 제외된다. 제거된 항목 목록은 app.getJumpListSettings()를 사용해 확인할 수 있다.

참고: 점프 목록 항목의 description 속성 최대 길이는 260자이다. 이 제한을 초과하면 해당 항목은 점프 목록에 추가되지 않으며 표시되지도 않는다.

다음은 커스텀 점프 목록을 생성하는 간단한 예제이다:

const { app } = require('electron')

app.setJumpList([
{
type: 'custom',
name: 'Recent Projects',
items: [
{ type: 'file', path: 'C:\\Projects\\project1.proj' },
{ type: 'file', path: 'C:\\Projects\\project2.proj' }
]
},
{ // name이 설정되었으므로 `type`은 "custom"으로 간주됨
name: 'Tools',
items: [
{
type: 'task',
title: 'Tool A',
program: process.execPath,
args: '--run-tool-a',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool A'
},
{
type: 'task',
title: 'Tool B',
program: process.execPath,
args: '--run-tool-b',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool B'
}
]
},
{ type: 'frequent' },
{ // name과 type이 모두 없으므로 `type`은 "tasks"로 간주됨
items: [
{
type: 'task',
title: 'New Project',
program: process.execPath,
args: '--new-project',
description: 'Create a new project.'
},
{ type: 'separator' },
{
type: 'task',
title: 'Recover Project',
program: process.execPath,
args: '--recover-project',
description: 'Recover Project'
}
]
}
])

app.requestSingleInstanceLock([additionalData])

  • additionalData Record<any, any> (선택 사항) - 첫 번째 인스턴스로 전송할 추가 데이터를 포함하는 JSON 객체

반환 값: boolean

이 메서드의 반환 값은 현재 애플리케이션 인스턴스가 잠금을 성공적으로 획득했는지 여부를 나타낸다. 잠금 획득에 실패하면, 이미 다른 인스턴스가 실행 중임을 의미하며, 즉시 종료해야 한다.

즉, 이 메서드는 현재 프로세스가 애플리케이션의 기본 인스턴스이고 애플리케이션이 계속 로드되어야 할 경우 true를 반환한다. 이미 잠금을 획득한 다른 인스턴스에 매개변수를 전송했으므로 현재 프로세스가 즉시 종료되어야 할 경우 false를 반환한다.

macOS에서는 사용자가 Finder에서 앱의 두 번째 인스턴스를 열려고 할 때 시스템이 자동으로 단일 인스턴스를 강제하며, open-fileopen-url 이벤트가 발생한다. 그러나 사용자가 커맨드라인에서 앱을 시작하면 시스템의 단일 인스턴스 메커니즘이 우회되므로, 이 메서드를 사용해 단일 인스턴스를 보장해야 한다.

두 번째 인스턴스가 시작될 때 기본 인스턴스의 윈도우를 활성화하는 예제:

const { app, BrowserWindow } = require('electron')
let myWindow = null

const additionalData = { myKey: 'myValue' }
const gotTheLock = app.requestSingleInstanceLock(additionalData)

if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', (event, commandLine, workingDirectory, additionalData) => {
// 두 번째 인스턴스에서 받은 데이터를 출력
console.log(additionalData)

// 누군가 두 번째 인스턴스를 실행하려고 시도했으므로, 윈도우에 포커스를 맞춤
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})

app.whenReady().then(() => {
myWindow = new BrowserWindow({})
myWindow.loadURL('https://electronjs.org')
})
}

app.hasSingleInstanceLock()

boolean을 반환한다.

이 메서드는 현재 앱 인스턴스가 단일 인스턴스 잠금을 보유하고 있는지 여부를 반환한다. app.requestSingleInstanceLock()를 사용해 잠금을 요청하고, app.releaseSingleInstanceLock()를 사용해 잠금을 해제할 수 있다.

app.releaseSingleInstanceLock()

requestSingleInstanceLock로 생성된 모든 잠금을 해제한다. 이 메서드를 사용하면 애플리케이션의 여러 인스턴스를 다시 동시에 실행할 수 있다.

app.setUserActivity(type, userInfo[, webpageURL]) macOS

  • type string - 활동을 고유하게 식별하는 값. [NSUserActivity.activityType][activity-type]에 매핑된다.
  • userInfo any - 다른 기기에서 사용할 수 있도록 저장할 앱의 특정 상태 정보.
  • webpageURL string (선택 사항) - 재개 기기에 적합한 앱이 설치되어 있지 않을 경우 브라우저에서 로드할 웹페이지. 스키마는 http 또는 https여야 한다.

NSUserActivity를 생성하고 이를 현재 활동으로 설정한다. 이 활동은 이후 [Handoff][handoff]를 통해 다른 기기로 전달될 수 있다.

app.getCurrentActivityType() macOS

현재 실행 중인 활동의 타입을 string으로 반환한다.

app.invalidateCurrentActivity() macOS

현재 [Handoff][handoff] 사용자 활동을 무효화한다.

app.resignCurrentActivity() macOS

현재 [Handoff][handoff] 사용자 활동을 비활성 상태로 표시하지만, 이를 무효화하지는 않는다.

app.updateCurrentActivity(type, userInfo) macOS

  • type string - 활동을 고유하게 식별한다. [NSUserActivity.activityType][activity-type]에 매핑된다.
  • userInfo any - 다른 디바이스에서 사용할 수 있도록 저장할 앱별 상태 정보이다.

현재 활동의 타입이 type과 일치하면, userInfo의 항목을 현재 userInfo 딕셔너리에 병합하여 활동을 업데이트한다.

app.setAppUserModelId(id) Windows

  • id string

[Application User Model ID][app-user-model-id]를 id로 변경한다.

app.setActivationPolicy(policy) macOS

  • policy string - 'regular', 'accessory', 'prohibited' 중 하나를 선택할 수 있다.

주어진 앱의 활성화 정책을 설정한다.

활성화 정책 타입:

  • 'regular' - 일반적인 앱으로, Dock에 나타나며 사용자 인터페이스를 가질 수 있다.
  • 'accessory' - Dock에 나타나지 않고 메뉴 바도 없지만, 프로그램적으로 활성화되거나 윈도우를 클릭하여 활성화될 수 있다.
  • 'prohibited' - Dock에 나타나지 않으며 윈도우를 생성하거나 활성화할 수 없다.

app.importCertificate(options, callback) Linux

  • options Object
    • certificate string - pkcs12 파일의 경로.
    • password string - 인증서의 암호.
  • callback Function
    • result Integer - import 작업의 결과.

pkcs12 형식의 인증서를 플랫폼 인증서 저장소로 가져온다. callback은 import 작업의 result와 함께 호출되며, 0은 성공을 나타내고 그 외의 값은 Chromium의 net_error_list에 따라 실패를 나타낸다.

app.configureHostResolver(options)

  • options Object
    • enableBuiltInResolver boolean (선택 사항) - 내장된 호스트 리졸버를 getaddrinfo 대신 사용할지 여부. 활성화하면 내장 리졸버가 시스템의 DNS 설정을 사용해 DNS 조회를 시도한다. 기본값은 macOS에서 활성화, Windows와 Linux에서는 비활성화.
    • secureDnsMode string (선택 사항) - 'off', 'automatic', 'secure' 중 하나. DNS-over-HTTP(DoH) 모드를 설정한다. 'off'일 때는 DoH 조회를 수행하지 않는다. 'automatic'일 때는 DoH가 가능하면 먼저 DoH 조회를 시도하고, 실패 시 일반 DNS 조회를 대체로 사용한다. 'secure'일 때는 DoH 조회만 수행한다. 기본값은 'automatic'.
    • secureDnsServers string[] (선택 사항) - DNS-over-HTTP 서버 템플릿 목록. 템플릿 형식은 RFC8484 § 3을 참고. 대부분의 서버는 POST 메서드를 지원하며, 이 경우 템플릿은 단순히 URI다. 일부 DNS 제공자의 경우, 이 목록에 DoH 서버가 없더라도 DoH가 명시적으로 비활성화되지 않으면 자동으로 DoH로 업그레이드된다.
    • enableAdditionalDnsQueryTypes boolean (선택 사항) - 일반 DNS를 통해 요청할 때 전통적인 A와 AAAA 쿼리 외에 추가 DNS 쿼리 타입(예: HTTPS, DNS 타입 65)을 허용할지 여부. Secure DNS에는 영향을 미치지 않으며, Secure DNS는 항상 추가 타입을 허용한다. 기본값은 true.

호스트 리졸루션(DNS 및 DNS-over-HTTPS)을 설정한다. 기본적으로 다음과 같은 순서로 리졸버를 사용한다:

  1. DNS-over-HTTPS, DNS 제공자가 이를 지원하는 경우
  2. 내장 리졸버 (기본적으로 macOS에서만 활성화)
  3. 시스템 리졸버 (예: getaddrinfo)

이 설정을 통해 암호화되지 않은 DNS 사용을 제한하거나(secureDnsMode: "secure"), DNS-over-HTTPS를 비활성화할 수 있다(secureDnsMode: "off"). 또한 내장 리졸버를 활성화하거나 비활성화할 수도 있다.

일반 DNS를 비활성화하려면 secureDnsMode"secure"로 설정한다. 이 경우, 사용자의 DNS 설정에 DoH를 지원하는 제공자가 포함되어 있지 않을 수 있으므로, 사용할 DNS-over-HTTPS 서버 목록을 제공해야 한다.

const { app } = require('electron')

app.whenReady().then(() => {
app.configureHostResolver({
secureDnsMode: 'secure',
secureDnsServers: [
'https://cloudflare-dns.com/dns-query'
]
})
})

이 API는 ready 이벤트가 발생한 후에 호출해야 한다.

app.disableHardwareAcceleration()

현재 앱의 하드웨어 가속 기능을 비활성화한다.

이 메서드는 앱이 준비되기 전에만 호출할 수 있다.

app.disableDomainBlockingFor3DAPIs()

기본적으로 Chromium은 GPU 프로세스가 너무 자주 중단되면 도메인별로 3D API(예: WebGL)를 재시작할 때까지 비활성화한다. 이 함수는 해당 동작을 비활성화한다.

이 메서드는 앱이 준비되기 전에만 호출할 수 있다.

app.getAppMetrics()

ProcessMetric[] 타입의 배열을 반환한다. 이 배열은 앱과 관련된 모든 프로세스의 메모리 및 CPU 사용량 통계에 해당하는 ProcessMetric 객체들로 구성된다.

app.getGPUFeatureStatus()

GPUFeatureStatus를 반환한다. 이는 chrome://gpu/에서 제공하는 그래픽 기능 상태 정보를 나타낸다.

참고: 이 정보는 gpu-info-update 이벤트가 발생한 후에만 사용할 수 있다.

app.getGPUInfo(infoType)

  • infoType string - basic 또는 complete 값을 가질 수 있다.

Promise<unknown>을 반환한다.

infoTypecomplete인 경우: Promise는 chromium의 GPUInfo 객체와 동일한 모든 GPU 정보를 포함하는 Object로 이행된다. 이 정보는 chrome://gpu 페이지에 표시되는 버전 및 드라이버 정보를 포함한다.

infoTypebasic인 경우: Promise는 complete로 요청했을 때보다 더 적은 속성을 포함하는 Object로 이행된다. 다음은 기본 응답의 예시이다:

{
auxAttributes:
{
amdSwitchable: true,
canSupportThreadedTextureMailbox: false,
directComposition: false,
directRendering: true,
glResetNotificationStrategy: 0,
inProcessGpu: true,
initializationTime: 0,
jpegDecodeAcceleratorSupported: false,
optimus: false,
passthroughCmdDecoder: false,
sandboxed: false,
softwareRendering: false,
supportsOverlays: false,
videoDecodeAcceleratorFlags: 0
},
gpuDevice:
[{ active: true, deviceId: 26657, vendorId: 4098 },
{ active: false, deviceId: 3366, vendorId: 32902 }],
machineModelName: 'MacBookPro',
machineModelVersion: '11.5'
}

vendorIddeviceId와 같은 기본 정보만 필요한 경우 basic을 사용하는 것이 권장된다.

app.setBadgeCount([count]) Linux macOS

  • count Integer (선택 사항) - 값을 제공하면 배지에 해당 값을 표시한다. 값을 제공하지 않으면 macOS에서는 알림 개수를 알 수 없는 상태를 나타내는 흰색 점을 표시한다. Linux에서는 값을 제공하지 않으면 배지가 표시되지 않는다.

반환값: boolean - 호출이 성공했는지 여부를 나타낸다.

현재 앱의 카운터 배지를 설정한다. 카운트를 0으로 설정하면 배지가 사라진다.

macOS에서는 도크 아이콘에 배지가 표시된다. Linux에서는 Unity 런처에서만 작동한다.

참고: Unity 런처는 .desktop 파일이 필요하다. 자세한 내용은 [Unity 통합 문서][unity-requirement]를 참고한다.

참고: macOS에서는 이 메서드가 작동하려면 앱이 알림을 표시할 수 있는 권한이 있어야 한다.

app.getBadgeCount() Linux macOS

Integer 타입의 값을 반환한다. 이 값은 카운터 배지에 현재 표시된 숫자를 나타낸다.

app.isUnityRunning() Linux

boolean을 반환한다. 현재 데스크톱 환경이 Unity 런처인지 여부를 나타낸다.

app.getLoginItemSettings([options]) macOS Windows

  • options 객체 (선택 사항)
    • type 문자열 (선택 사항) macOS - mainAppService, agentService, daemonService, 또는 loginItemService 중 하나일 수 있다. 기본값은 mainAppService이다. macOS 13 이상에서만 사용 가능하다. 각 타입에 대한 자세한 내용은 app.setLoginItemSettings를 참고한다.
    • serviceName 문자열 (선택 사항) macOS - 서비스의 이름이다. type이 기본값이 아닌 경우 필수이다. macOS 13 이상에서만 사용 가능하다.
    • path 문자열 (선택 사항) Windows - 비교할 실행 파일 경로이다. 기본값은 process.execPath이다.
    • args 문자열[] (선택 사항) Windows - 비교할 커맨드라인 인자이다. 기본값은 빈 배열이다.

app.setLoginItemSettingspathargs 옵션을 제공했다면, openAtLogin이 올바르게 설정되려면 여기서도 동일한 인자를 전달해야 한다.

반환 값 객체:

  • openAtLogin 불리언 - 앱이 로그인 시 자동으로 열리도록 설정된 경우 true이다.
  • openAsHidden 불리언 macOS Deprecated - 앱이 로그인 시 숨겨진 상태로 열리도록 설정된 경우 true이다. macOS 13 이상에서는 작동하지 않는다.
  • wasOpenedAtLogin 불리언 macOS - 앱이 로그인 시 자동으로 열린 경우 true이다.
  • wasOpenedAsHidden 불리언 macOS Deprecated - 앱이 숨겨진 로그인 항목으로 열린 경우 true이다. 이는 앱이 시작 시 어떤 윈도우도 열지 않아야 함을 나타낸다. 이 설정은 [MAS 빌드][mas-builds]나 macOS 13 이상에서는 사용할 수 없다.
  • restoreState 불리언 macOS Deprecated - 앱이 이전 세션의 상태를 복원해야 하는 로그인 항목으로 열린 경우 true이다. 이는 앱이 마지막으로 종료되었을 때 열려 있던 윈도우를 복원해야 함을 나타낸다. 이 설정은 [MAS 빌드][mas-builds]나 macOS 13 이상에서는 사용할 수 없다.
  • status 문자열 macOS - not-registered, enabled, requires-approval, 또는 not-found 중 하나일 수 있다.
  • executableWillLaunchAtLogin 불리언 Windows - 앱이 로그인 시 열리도록 설정되었고 실행 키가 비활성화되지 않은 경우 true이다. 이는 openAtLogin과 달리 args 옵션을 무시하며, 주어진 실행 파일이 어떤 인자로든 로그인 시 실행될 경우 이 속성은 true가 된다.
  • launchItems 객체[] Windows
    • name 문자열 Windows - 레지스트리 항목의 이름 값이다.
    • path 문자열 Windows - 레지스트리 항목에 해당하는 앱의 실행 파일 경로이다.
    • args 문자열[] Windows - 실행 파일에 전달할 커맨드라인 인자이다.
    • scope 문자열 Windows - user 또는 machine 중 하나이다. 레지스트리 항목이 HKEY_CURRENT_USER 또는 HKEY_LOCAL_MACHINE 아래에 있는지 나타낸다.
    • enabled 불리언 Windows - 앱 레지스트리 키가 시작 시 승인되었고 따라서 작업 관리자와 Windows 설정에서 enabled로 표시되는 경우 true이다.

app.setLoginItemSettings(settings) macOS Windows

  • settings Object
    • openAtLogin boolean (선택 사항) - 로그인 시 앱을 자동으로 실행하려면 true, 로그인 항목에서 앱을 제거하려면 false로 설정한다. 기본값은 false이다.
    • openAsHidden boolean (선택 사항) macOS Deprecated - 앱을 숨겨진 상태로 실행하려면 true로 설정한다. 기본값은 false이다. 사용자는 시스템 환경설정에서 이 설정을 변경할 수 있으므로, 앱이 실행될 때 app.getLoginItemSettings().wasOpenedAsHidden을 확인해 현재 값을 알아야 한다. 이 설정은 [MAS 빌드][mas-builds]나 macOS 13 이상에서는 사용할 수 없다.
    • type string (선택 사항) macOS - 로그인 항목으로 추가할 서비스 타입을 지정한다. 기본값은 mainAppService이다. macOS 13 이상에서만 사용 가능하다.
      • mainAppService - 기본 애플리케이션.
      • agentService - 실행 에이전트의 프로퍼티 리스트 이름. 이 이름은 앱의 Contents/Library/LaunchAgents 디렉터리에 있는 프로퍼티 리스트와 일치해야 한다.
      • daemonService string (선택 사항) macOS - 실행 데몬의 프로퍼티 리스트 이름. 이 이름은 앱의 Contents/Library/LaunchDaemons 디렉터리에 있는 프로퍼티 리스트와 일치해야 한다.
      • loginItemService string (선택 사항) macOS - 로그인 항목 서비스의 프로퍼티 리스트 이름. 이 이름은 앱의 Contents/Library/LoginItems 디렉터리에 있는 프로퍼티 리스트와 일치해야 한다.
    • serviceName string (선택 사항) macOS - 서비스 이름. type이 기본값이 아닌 경우 필수이다. macOS 13 이상에서만 사용 가능하다.
    • path string (선택 사항) Windows - 로그인 시 실행할 실행 파일 경로. 기본값은 process.execPath이다.
    • args string[] (선택 사항) Windows - 실행 파일에 전달할 커맨드라인 인자. 기본값은 빈 배열이다. 경로를 따옴표로 감싸는 것에 주의한다.
    • enabled boolean (선택 사항) Windows - true로 설정하면 시작 시 승인된 레지스트리 키를 변경하고, 작업 관리자 및 Windows 설정에서 앱을 활성화/비활성화한다. 기본값은 true이다.
    • name string (선택 사항) Windows - 레지스트리에 기록할 값 이름. 기본값은 앱의 AppUserModelId()이다.

앱의 로그인 항목 설정을 지정한다.

Windows에서 [Squirrel][Squirrel-Windows]을 사용하는 Electron의 autoUpdater와 함께 작동하려면, 실행 경로를 Update.exe로 설정하고 애플리케이션 이름을 지정하는 인자를 전달해야 한다. 예를 들어:

const { app } = require('electron')
const path = require('node:path')

const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)

app.setLoginItemSettings({
openAtLogin: true,
path: updateExe,
args: [
'--processStart', `"${exeName}"`,
'--process-start-args', '"--hidden"'
]
})

macOS 13 이상에서 다양한 서비스를 로그인 항목으로 설정하는 방법에 대한 자세한 내용은 SMAppService를 참조한다.

app.isAccessibilitySupportEnabled() macOS Windows

boolean 값을 반환한다. Chrome의 접근성 지원이 활성화되어 있으면 true, 그렇지 않으면 false를 반환한다. 이 API는 화면 읽기 프로그램과 같은 보조 기술 사용이 감지되었을 때 true를 반환한다. 자세한 내용은 https://www.chromium.org/developers/design-documents/accessibility를 참고한다.

app.setAccessibilitySupportEnabled(enabled) macOS Windows

이 메서드는 Chrome의 접근성 지원을 수동으로 활성화하여 애플리케이션 설정에서 사용자에게 접근성 스위치를 노출할 수 있게 한다. 자세한 내용은 Chromium 접근성 문서를 참고한다. 기본적으로 비활성화되어 있다.

이 API는 ready 이벤트가 발생한 후에 호출해야 한다.

참고: 접근성 트리를 렌더링하면 애플리케이션의 성능에 상당한 영향을 미칠 수 있다. 기본적으로 활성화하지 않는 것이 좋다.

app.showAboutPanel()

앱의 '정보' 패널을 표시한다. 이 패널의 옵션은 app.setAboutPanelOptions(options)를 통해 재정의할 수 있다. 이 함수는 비동기적으로 실행된다.

app.setAboutPanelOptions(options)

  • options Object
    • applicationName string (optional) - 앱 이름
    • applicationVersion string (optional) - 앱 버전
    • copyright string (optional) - 저작권 정보
    • version string (optional) macOS - 앱 빌드 버전 번호
    • credits string (optional) macOS Windows - 크레딧 정보
    • authors string[] (optional) Linux - 앱 개발자 목록
    • website string (optional) Linux - 앱 웹사이트
    • iconPath string (optional) Linux Windows - JPEG 또는 PNG 파일 형식의 앱 아이콘 경로. Linux에서는 64x64 픽셀로 표시되며 비율은 유지된다. Windows에서는 48x48 PNG가 최적의 화질을 제공한다.

앱의 정보 패널 옵션을 설정한다. macOS에서는 앱의 .plist 파일에 정의된 값을 덮어쓴다. 자세한 내용은 [Apple 문서][about-panel-options]를 참고한다. Linux에서는 값을 설정해야 표시되며, 기본값이 없다.

credits를 설정하지 않았지만 앱에서 크레딧 정보를 표시하려면, AppKit은 NSBundle 클래스 메서드 main이 반환한 번들에서 "Credits.html", "Credits.rtf", "Credits.rtfd" 파일을 순서대로 찾는다. 가장 먼저 발견된 파일을 사용하며, 아무 파일도 없으면 정보 영역은 비워진다. 자세한 내용은 Apple 문서를 참고한다.

app.isEmojiPanelSupported()는 현재 운영체제 버전이 네이티브 이모지 선택기를 지원하는지 여부를 boolean 값으로 반환한다.

app.showEmojiPanel() macOS Windows

플랫폼의 기본 이모지 선택기를 표시한다.

app.startAccessingSecurityScopedResource(bookmarkData) MAS

  • bookmarkData string - dialog.showOpenDialog 또는 dialog.showSaveDialog 메서드에서 반환된 base64로 인코딩된 보안 범위 북마크 데이터.

반환값 Function - 이 함수는 보안 범위 파일에 대한 접근이 끝난 후 반드시 호출해야 한다. 북마크 접근을 중지하지 않으면 커널 리소스가 누출되고, 앱이 재시작될 때까지 샌드박스 외부에 접근할 수 있는 능력을 완전히 상실한다.

const { app, dialog } = require('electron')
const fs = require('node:fs')

let filepath
let bookmark

dialog.showOpenDialog(null, { securityScopedBookmarks: true }).then(({ filePaths, bookmarks }) => {
filepath = filePaths[0]
bookmark = bookmarks[0]
fs.readFileSync(filepath)
})

// ... 앱 재시작 ...

const stopAccessingSecurityScopedResource = app.startAccessingSecurityScopedResource(bookmark)
fs.readFileSync(filepath)
stopAccessingSecurityScopedResource()

보안 범위 리소스에 접근을 시작한다. 이 메서드를 사용하면 Mac App Store용으로 패키징된 Electron 애플리케이션이 샌드박스 외부에서 사용자가 선택한 파일에 접근할 수 있다. 이 시스템이 어떻게 동작하는지에 대한 자세한 설명은 Apple의 문서를 참고한다.

app.enableSandbox()

앱에 전체 샌드박스 모드를 활성화한다. 이 메서드를 사용하면 WebPreferencessandbox 플래그 값과 상관없이 모든 렌더러가 샌드박스 모드로 실행된다.

이 메서드는 앱이 준비되기 전에만 호출할 수 있다.

app.isInApplicationsFolder() macOS

boolean 타입을 반환한다. 애플리케이션이 현재 시스템의 Applications 폴더에서 실행 중인지 여부를 나타낸다. app.moveToApplicationsFolder()와 함께 사용한다.

app.moveToApplicationsFolder([options]) macOS

  • options Object (선택 사항)
    • conflictHandler Function<boolean> (선택 사항) - 이동 실패 시 발생할 수 있는 충돌을 처리하는 핸들러.
      • conflictType string - 핸들러가 처리할 이동 충돌의 타입. exists 또는 existsAndRunning이 될 수 있다. exists는 같은 이름의 앱이 Applications 디렉토리에 이미 존재함을 의미하며, existsAndRunning은 같은 이름의 앱이 존재하면서 실행 중인 상태를 의미한다.

반환 값 boolean - 이동이 성공했는지 여부. 이동이 성공하면 앱이 종료된 후 다시 실행된다.

기본적으로 확인 대화상자는 표시되지 않는다. 사용자가 작업을 확인할 수 있도록 허용하려면 dialog API를 사용할 수 있다.

참고: 이 메서드는 사용자가 아닌 다른 이유로 이동이 실패할 경우 에러를 발생시킨다. 예를 들어 사용자가 인증 대화상자를 취소하면 이 메서드는 false를 반환한다. 복사 작업에 실패하면 이 메서드는 에러를 발생시킨다. 에러 메시지는 문제가 무엇인지 명확히 알려준다.

기본적으로, 이동하려는 앱과 같은 이름의 앱이 Applications 디렉토리에 존재하고 실행 중이 아닌 경우, 기존 앱은 휴지통으로 이동되고 현재 활성화된 앱이 그 자리를 차지한다. 만약 같은 이름의 앱이 실행 중인 경우, 기존에 실행 중이던 앱이 포커스를 잡고 이전에 활성화된 앱은 자동으로 종료된다. 이 동작은 선택적 충돌 핸들러를 제공하여 변경할 수 있다. 핸들러가 반환하는 불리언 값은 충돌이 기본 동작으로 해결될지 여부를 결정한다. 즉, false를 반환하면 추가 작업이 수행되지 않고, true를 반환하면 기본 동작이 수행되며 메서드가 계속 진행된다.

예시:

const { app, dialog } = require('electron')

app.moveToApplicationsFolder({
conflictHandler: (conflictType) => {
if (conflictType === 'exists') {
return dialog.showMessageBoxSync({
type: 'question',
buttons: ['이동 중단', '이동 계속'],
defaultId: 0,
message: '같은 이름의 앱이 이미 존재합니다'
}) === 1
}
}
})

이 예시는 사용자 디렉토리에 같은 이름의 앱이 이미 존재하는 경우, 사용자가 '이동 계속'을 선택하면 함수가 기본 동작을 계속 수행하여 기존 앱을 휴지통으로 이동하고 현재 앱을 그 자리로 이동시킨다.

app.isSecureKeyboardEntryEnabled() macOS

boolean 타입의 값을 반환한다. 이 값은 Secure Keyboard Entry가 활성화되어 있는지 여부를 나타낸다.

기본적으로 이 API는 false를 반환한다.

app.setSecureKeyboardEntryEnabled(enabled) macOS

  • enabled boolean - Secure Keyboard Entry 활성화 여부

애플리케이션에서 Secure Keyboard Entry를 활성화한다.

이 API를 사용하면 비밀번호와 같은 중요한 정보가 다른 프로세스에 의해 가로채지는 것을 방지할 수 있다.

자세한 내용은 Apple의 문서를 참고한다.

참고: Secure Keyboard Entry는 필요할 때만 활성화하고, 더 이상 필요하지 않으면 비활성화해야 한다.

app.setProxy(config)

Promise<void>를 반환한다. 프록시 설정 프로세스가 완료되면 resolve된다.

Session과 연결되지 않은 네트워크 요청에 대한 프록시 설정을 지정한다. 현재 이 설정은 utility process에서 Net을 통해 이루어지는 요청과 런타임이 내부적으로 수행하는 요청(예: 위치 정보 조회)에 영향을 미친다.

이 메서드는 앱이 준비된 후에만 호출할 수 있다.

app.resolveProxy(url)

  • url URL

Promise<string>를 반환한다. 이 Promise는 유틸리티 프로세스에서 Net을 사용해 요청을 시도할 때 url에 적용될 프록시 정보로 해결된다.

app.setClientCertRequestPasswordHandler(handler) Linux

  • handler Function<Promise<string>>

    • clientCertRequestParams Object
      • hostname string - 클라이언트 인증서가 필요한 사이트의 호스트명
      • tokenName string - 암호화 장치의 토큰(또는 슬롯) 이름
      • isRetry boolean - 이전에 비밀번호 입력 시도가 실패했는지 여부

    Returns Promise<string> - 비밀번호를 반환하는 Promise

이 핸들러는 hostname에 대한 클라이언트 인증서를 잠금 해제하기 위해 비밀번호가 필요할 때 호출된다.

const { app } = require('electron')

async function passwordPromptUI (text) {
return new Promise((resolve, reject) => {
// 사용자에게 비밀번호를 입력받는 UI를 표시
// ...
// ...
resolve('the password')
})
}

app.setClientCertRequestPasswordHandler(async ({ hostname, tokenName, isRetry }) => {
const text = `${tokenName}에 로그인하여 ${hostname}에 대한 인증서로 인증하세요`
const password = await passwordPromptUI(text)
return password
})

속성

app.accessibilitySupportEnabled macOS Windows

boolean 타입의 속성은 Chrome의 접근성 지원이 활성화되어 있으면 true, 그렇지 않으면 false가 된다. 스크린 리더와 같은 보조 기술이 사용 중인 경우 이 속성은 true로 설정된다. 이 속성을 수동으로 true로 설정하면 Chrome의 접근성 지원이 활성화되며, 개발자는 애플리케이션 설정에서 사용자에게 접근성 스위치를 노출할 수 있다.

자세한 내용은 Chromium의 접근성 문서를 참고하길 바란다. 기본적으로는 비활성화되어 있다.

이 API는 ready 이벤트가 발생한 후에 호출해야 한다.

참고: 접근성 트리를 렌더링하면 애플리케이션의 성능에 상당한 영향을 미칠 수 있다. 따라서 기본적으로 활성화해서는 안 된다.

app.applicationMenu

이 속성은 Menu | null 타입을 가지며, 설정된 Menu가 있으면 해당 메뉴를 반환하고, 그렇지 않으면 null을 반환한다. 사용자는 Menu를 전달하여 이 속성을 설정할 수 있다.

app.badgeCount Linux macOS

Integer 타입의 속성으로, 현재 앱의 뱃지 개수를 반환한다. 값을 0으로 설정하면 뱃지를 숨길 수 있다.

macOS에서는 0이 아닌 정수 값을 설정하면 도크 아이콘에 뱃지가 표시된다. Linux에서는 이 속성이 Unity 런처에서만 동작한다.

참고: Unity 런처는 .desktop 파일이 필요하다. 자세한 내용은 [Unity 통합 문서][unity-requirement]를 참고한다.

참고: macOS에서는 이 속성이 제대로 동작하려면 앱이 알림을 표시할 수 있는 권한이 있어야 한다.

app.commandLine 읽기 전용

Chromium이 사용하는 커맨드라인 인자를 읽고 조작할 수 있는 CommandLine 객체이다.

app.dock macOS 읽기 전용

macOS에서 사용자의 도크에 있는 앱 아이콘에 대한 작업을 수행할 수 있는 Dock | undefined 객체이다.

app.isPackaged 읽기 전용

boolean 타입의 프로퍼티는 앱이 패키징된 상태라면 true를 반환하고, 그렇지 않으면 false를 반환한다. 많은 앱에서 이 프로퍼티를 사용해 개발 환경과 프로덕션 환경을 구분할 수 있다.

app.name

app.name은 현재 애플리케이션의 이름을 나타내는 문자열 프로퍼티이다. 이 값은 애플리케이션의 package.json 파일에 있는 이름을 참조한다.

일반적으로 package.jsonname 필드는 npm 모듈 스펙에 따라 짧은 소문자 이름으로 지정된다. 보통은 productName 필드도 함께 지정하는데, 이 필드는 애플리케이션의 전체 대문자 이름을 나타내며, Electron에서는 name보다 productName을 우선적으로 사용한다.

app.userAgentFallback

Electron이 전역적으로 사용할 기본 사용자 에이전트(user agent) 문자열을 나타내는 string 타입의 속성이다.

이 속성은 webContentssession 레벨에서 사용자 에이전트가 설정되지 않았을 때 사용된다. 앱 전체가 동일한 사용자 에이전트를 사용하도록 보장하는 데 유용하다. 앱 초기화 단계에서 가능한 한 빨리 커스텀 값으로 설정하여, 오버라이드한 값이 적용되도록 해야 한다.

app.runningUnderARM64Translation 읽기 전용 macOS Windows

boolean 값이 true일 경우, 앱이 현재 ARM64 변환기(예: macOS의 Rosetta Translator Environment 또는 Windows의 WOW)에서 실행 중임을 나타낸다.

이 속성을 사용해 사용자가 Rosetta나 WOW에서 실수로 x64 버전의 애플리케이션을 실행 중일 때, ARM64 버전을 다운로드하도록 안내할 수 있다.