앱
애플리케이션의 이벤트 생명주기를 제어한다.
프로세스: 메인
다음 예제는 마지막 윈도우가 닫힐 때 애플리케이션을 종료하는 방법을 보여준다:
const { app } = require('electron')
app.on('window-all-closed', () => {
app.quit()
})
이벤트
app
객체는 다음과 같은 이벤트를 발생시킨다:
이벤트: 'will-finish-launching'
이 이벤트는 애플리케이션이 기본적인 시작 단계를 마쳤을 때 발생한다. 윈도우와 리눅스에서는 will-finish-launching
이벤트가 ready
이벤트와 동일하다. macOS에서는 이 이벤트가 NSApplication
의 applicationWillFinishLaunching
알림에 해당한다.
대부분의 경우, 모든 작업은 ready
이벤트 핸들러에서 처리하는 것이 좋다.
이벤트: 'ready'
반환값:
event
EventlaunchInfo
Record<string, any> | NotificationResponse macOS
Electron이 초기화를 완료하면 한 번 발생하는 이벤트다. macOS에서는 launchInfo
에 NSUserNotification
의 userInfo
또는 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
EventexitCode
Integer
이 이벤트는 애플리케이션이 종료될 때 발생한다.
참고: 윈도우 환경에서는 시스템 종료/재시작 또는 사용자 로그아웃으로 인해 앱이 종료되는 경우 이 이벤트가 발생하지 않는다.
이벤트: 'open-file' macOS
반환값:
event
Eventpath
string
사용자가 애플리케이션으로 파일을 열고자 할 때 발생한다. open-file
이벤트는 일반적으로 애플리케이션이 이미 실행 중일 때, 운영체제가 해당 애플리케이션을 재사용하여 파일을 열려고 할 때 발생한다. 또한, 파일을 도크에 드롭했을 때 애플리케이션이 아직 실행되지 않은 경우에도 open-file
이벤트가 발생한다. 이런 상황을 처리하려면 애플리케이션 시작 시 매우 초기 단계에서 open-file
이벤트를 수신해야 한다(ready
이벤트가 발생하기 전에도).
이 이벤트를 직접 처리하려면 event.preventDefault()
를 호출해야 한다.
Windows에서는 파일 경로를 얻기 위해 메인 프로세스에서 process.argv
를 파싱해야 한다.
이벤트: 'open-url' macOS
반환값:
event
Eventurl
string
사용자가 애플리케이션으로 URL을 열려고 할 때 발생한다. 애플리케이션의 Info.plist
파일은 CFBundleURLTypes
키 내에 URL 스키마를 정의하고, NSPrincipalClass
를 AtomApplication
으로 설정해야 한다.
open-file
이벤트와 마찬가지로, 애플리케이션 시작 초기에 open-url
이벤트 리스너를 등록해야 URL 처리로 애플리케이션이 열릴 때 이를 감지할 수 있다. ready
이벤트에 대한 응답으로 리스너를 등록하면, 애플리케이션을 실행시키는 URL을 놓치게 된다.
이벤트: 'activate' macOS
반환값:
event
EventhasVisibleWindows
boolean
이 이벤트는 애플리케이션이 활성화될 때 발생한다. 애플리케이션을 처음 실행하거나, 이미 실행 중인 애플리케이션을 다시 실행하려고 시도하거나, 애플리케이션의 도크(Dock) 또는 작업 표시줄 아이콘을 클릭하는 등 다양한 동작이 이 이벤트를 트리거할 수 있다.
이벤트: 'did-become-active' macOS
반환값:
event
Event
이 이벤트는 애플리케이션이 활성화될 때마다 발생한다. activate
이벤트와 달리, did-become-active
는 Dock 아이콘을 클릭하거나 애플리케이션을 다시 실행할 때뿐만 아니라, 매번 앱이 활성화될 때마다 발생한다. 또한 사용자가 macOS 앱 스위처를 통해 앱으로 전환할 때도 이 이벤트가 발생한다.
이벤트: 'did-resign-active' macOS
반환값:
event
이벤트
이 이벤트는 앱이 활성 상태를 잃고 포커스를 갖지 못할 때 발생한다. 예를 들어, 다른 애플리케이션을 클릭하거나 macOS 앱 스위처를 사용해 다른 애플리케이션으로 전환할 때 이 이벤트가 트리거될 수 있다.
이벤트: 'continue-activity' macOS
반환값:
event
Eventtype
string - 활동을 식별하는 문자열. [NSUserActivity.activityType
][activity-type]에 매핑된다.userInfo
unknown - 다른 기기에서 활동에 의해 저장된 앱별 상태 정보를 포함한다.details
ObjectwebpageURL
string (선택 사항) - 다른 기기에서 접근한 웹페이지의 URL을 식별하는 문자열. 사용 가능한 경우에만 제공된다.
[Handoff][handoff] 중에 다른 기기에서 시작된 활동을 재개하려고 할 때 발생한다. 이 이벤트를 직접 처리하려면 event.preventDefault()
를 호출해야 한다.
사용자 활동은 해당 활동의 소스 앱과 동일한 개발자 팀 ID를 가지고 있으며, 활동 타입을 지원하는 앱에서만 계속할 수 있다. 지원되는 활동 타입은 앱의 Info.plist
파일에서 NSUserActivityTypes
키 아래에 지정된다.
이벤트: 'will-continue-activity' macOS
반환 값:
event
Eventtype
string - 활동을 식별하는 문자열. [NSUserActivity.activityType
][activity-type]에 매핑된다.
[Handoff][handoff] 과정에서 다른 기기의 활동이 재개되려고 할 때 발생한다. 이 이벤트를 직접 처리하려면 event.preventDefault()
를 호출해야 한다.
이벤트: 'continue-activity-error' macOS
반환값:
event
Eventtype
string - 활동을 식별하는 문자열. [NSUserActivity.activityType
][activity-type]에 매핑된다.error
string - 오류의 지역화된 설명을 담은 문자열.
[Handoff][handoff] 과정에서 다른 기기의 활동을 재개하려고 시도했지만 실패했을 때 발생한다.
이벤트: 'activity-was-continued' macOS
반환값:
event
Eventtype
string - 활동을 식별하는 문자열. [NSUserActivity.activityType
][activity-type]에 매핑된다.userInfo
unknown - 활동에 의해 저장된 앱별 상태 정보를 포함한다.
이 이벤트는 [Handoff][handoff] 과정에서 현재 기기의 활동이 다른 기기에서 성공적으로 재개되었을 때 발생한다.
이벤트: 'update-activity-state' macOS
반환값:
event
Eventtype
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의 기본 새 탭 버튼을 클릭할 때 발생하는 이벤트. 현재 BrowserWindow
가 tabbingIdentifier
를 가지고 있을 때만 새 탭 버튼이 보인다.
이벤트: 'browser-window-blur'
반환값:
event
Eventwindow
BrowserWindow
BrowserWindow가 포커스를 잃을 때 발생한다.
이벤트: 'browser-window-focus'
반환값:
event
Eventwindow
BrowserWindow
이 이벤트는 BrowserWindow가 포커스를 받을 때 발생한다.
이벤트: 'browser-window-created'
반환값:
event
Eventwindow
BrowserWindow
새로운 BrowserWindow가 생성될 때 발생한다.
이벤트: 'web-contents-created'
반환값:
event
EventwebContents
WebContents
새로운 webContents가 생성될 때 발생한다.
이벤트: 'certificate-error'
반환값:
event
EventwebContents
WebContentsurl
stringerror
string - 오류 코드certificate
Certificatecallback
FunctionisTrusted
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'
반환 값:
event
EventwebContents
WebContentsurl
URLcertificateList
Certificate[]callback
Functioncertificate
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
EventwebContents
WebContents (선택 사항)authenticationResponseDetails
Objecturl
URLpid
number
authInfo
ObjectisProxy
booleanscheme
stringhost
stringport
Integerrealm
string
callback
Functionusername
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'
반환값:
event
EventwebContents
WebContentsdetails
RenderProcessGoneDetails
렌더러 프로세스가 예기치 않게 종료될 때 발생한다. 일반적으로 프로세스가 충돌하거나 강제 종료된 경우에 이 이벤트가 발생한다.
이벤트: 'child-process-gone'
반환값:
event
Eventdetails
Objecttype
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
EventaccessibilitySupportEnabled
boolean - Chrome의 접근성 지원이 활성화된 경우true
, 그렇지 않으면false
Chrome의 접근성 지원 상태가 변경될 때 발생한다. 이 이벤트는 스크린 리더와 같은 보조 기술이 활성화되거나 비활성화될 때 트리거된다. 자세한 내용은 https://www.chromium.org/developers/design-documents/accessibility 를 참고한다.
이벤트: 'session-created'
반환값:
session
Session
Electron이 새로운 session
을 생성할 때 발생하는 이벤트이다.
const { app } = require('electron')
app.on('session-created', (session) => {
console.log(session)
})
이벤트: 'second-instance'
반환값:
event
Eventargv
string[] - 두 번째 인스턴스의 커맨드라인 인자 배열workingDirectory
string - 두 번째 인스턴스의 작업 디렉토리additionalData
unknown - 두 번째 인스턴스에서 전달된 추가 데이터의 JSON 객체
이 이벤트는 애플리케이션의 두 번째 인스턴스가 실행되고 app.requestSingleInstanceLock()
을 호출할 때, 기본 인스턴스 내에서 발생한다.
argv
는 두 번째 인스턴스의 커맨드라인 인자 배열이고, workingDirectory
는 해당 인스턴스의 현재 작업 디렉토리다. 일반적으로 애플리케이션은 이 이벤트에 반응하여 기본 윈도우를 포커스하고 최소화 상태를 해제한다.
참고: argv
는 두 번째 인스턴스에 전달된 인자 목록과 정확히 동일하지 않을 수 있다. 인자의 순서가 바뀌거나 추가 인자가 포함될 수 있다. 정확한 인자 목록이 필요하다면, additionalData
를 사용하는 것이 좋다.
참고: 두 번째 인스턴스가 첫 번째 인스턴스와 다른 사용자에 의해 시작된 경우, argv
배열에 인자가 포함되지 않을 수 있다.
이 이벤트는 app
의 ready
이벤트가 발생한 후에 반드시 발생한다.
참고: Chromium에 의해 추가적인 커맨드라인 인자(예: --original-process-start-time
)가 포함될 수 있다.
메서드
app
객체는 다음과 같은 메서드를 제공한다.
참고: 일부 메서드는 특정 운영체제에서만 사용할 수 있으며, 해당 메서드는 별도로 표시했다.
app.quit()
모든 윈도우를 닫으려고 시도한다. 먼저 before-quit
이벤트가 발생한다. 모든 윈도우가 성공적으로 닫히면 will-quit
이벤트가 발생하며, 기본적으로 애플리케이션이 종료된다.
이 메서드는 모든 beforeunload
와 unload
이벤트 핸들러가 올바르게 실행되도록 보장한다. 윈도우가 beforeunload
이벤트 핸들러에서 false
를 반환하여 종료를 취소할 수도 있다.
app.exit([exitCode])
exitCode
Integer (선택 사항)
exitCode
를 지정하여 즉시 애플리케이션을 종료한다. exitCode
를 생략할 경우 기본값은 0이다.
모든 윈도우는 사용자에게 묻지 않고 즉시 닫히며, before-quit
와 will-quit
이벤트는 발생하지 않는다.
app.relaunch([options])
현재 인스턴스가 종료될 때 앱을 다시 실행한다.
기본적으로 새 인스턴스는 현재 인스턴스와 동일한 작업 디렉토리와 커맨드라인 인자를 사용한다. 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])
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
- Windows에서는
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
Promise<NativeImage>
를 반환한다. 이 Promise는 NativeImage인 앱의 아이콘으로 이행된다.
주어진 경로와 연관된 아이콘을 가져온다.
_Windows_에서는 두 가지 유형의 아이콘이 있다:
.mp3
,.png
등 특정 파일 확장자와 연관된 아이콘.exe
,.dll
,.ico
처럼 파일 자체에 포함된 아이콘
_Linux_와 _macOS_에서는 파일의 MIME 타입과 연관된 애플리케이션에 따라 아이콘이 결정된다.
app.setPath(name, path)
name
stringpath
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
를 추가한다.
tasks
는 Task 객체의 배열이다.
반환값: boolean
- 호출이 성공했는지 여부
참고: 점프 리스트를 더욱 세부적으로 커스터마이즈하고 싶다면 app.setJumpList(categories)
를 대신 사용한다.
app.getJumpListSettings()
Windows
객체를 반환한다:
minItems
Integer - 점프 목록에 표시될 최소 아이템 수. 이 값에 대한 자세한 설명은 [MSDN 문서][JumpListBeginListMSDN]를 참고한다.removedItems
JumpListItem[] - 사용자가 점프 목록의 커스텀 카테고리에서 명시적으로 제거한 아이템에 해당하는JumpListItem
객체 배열. 이 아이템들은 다음app.setJumpList()
호출에서 점프 목록에 다시 추가해서는 안 된다. 윈도우는 제거된 아이템을 포함하는 커스텀 카테고리를 표시하지 않는다.
app.setJumpList(categories)
Windows
categories
JumpListCategory[] |null
-JumpListCategory
객체 배열
반환값: string
애플리케이션에 커스텀 점프 목록을 설정하거나 제거한다. 이 메서드는 다음 문자열 중 하나를 반환한다:
ok
- 문제가 없음error
- 하나 이상의 오류가 발생했으며, 런타임 로깅을 활성화해 원인을 파악할 수 있음invalidSeparatorError
- 점프 목록의 커스텀 카테고리에 구분자를 추가하려고 시도했음. 구분자는 표준Tasks
카테고리에서만 허용됨fileTypeRegistrationError
- 애플리케이션이 처리할 수 없는 파일 타입의 링크를 점프 목록에 추가하려고 시도했음customCategoryAccessDeniedError
- 사용자 개인정보 보호 정책이나 그룹 정책 설정으로 인해 커스텀 카테고리를 점프 목록에 추가할 수 없음
categories
가 null
인 경우, 이전에 설정된 커스텀 점프 목록(존재한다면)이 애플리케이션의 표준 점프 목록(Windows에서 관리)으로 대체된다.
참고: JumpListCategory
객체에 type
과 name
속성이 모두 설정되지 않은 경우, type
은 tasks
로 간주된다. name
속성은 설정되었지만 type
속성이 생략된 경우, type
은 custom
으로 간주된다.
참고: 사용자는 커스텀 카테고리에서 항목을 제거할 수 있으며, 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-file
및 open-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
callback
Functionresult
Integer - import 작업의 결과.
pkcs12 형식의 인증서를 플랫폼 인증서 저장소로 가져온다. callback
은 import 작업의 result
와 함께 호출되며, 0
은 성공을 나타내고 그 외의 값은 Chromium의 net_error_list에 따라 실패를 나타낸다.
app.configureHostResolver(options)
호스트 리졸루션(DNS 및 DNS-over-HTTPS)을 설정한다. 기본적으로 다음과 같은 순서로 리졸버를 사용한다:
- DNS-over-HTTPS, DNS 제공자가 이를 지원하는 경우
- 내장 리졸버 (기본적으로 macOS에서만 활성화)
- 시스템 리졸버 (예:
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>
을 반환한다.
infoType
이 complete
인 경우:
Promise는 chromium의 GPUInfo 객체와 동일한 모든 GPU 정보를 포함하는 Object
로 이행된다. 이 정보는 chrome://gpu
페이지에 표시되는 버전 및 드라이버 정보를 포함한다.
infoType
이 basic
인 경우:
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'
}
vendorId
나 deviceId
와 같은 기본 정보만 필요한 경우 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
app.setLoginItemSettings
에 path
와 args
옵션을 제공했다면, 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
객체[] Windowsname
문자열 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
ObjectopenAtLogin
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
enabled
boolean - 접근성 트리 렌더링을 활성화 또는 비활성화
이 메서드는 Chrome의 접근성 지원을 수동으로 활성화하여 애플리케이션 설정에서 사용자에게 접근성 스위치를 노출할 수 있게 한다. 자세한 내용은 Chromium 접근성 문서를 참고한다. 기본적으로 비활성화되어 있다.
이 API는 ready
이벤트가 발생한 후에 호출해야 한다.
참고: 접근성 트리를 렌더링하면 애플리케이션의 성능에 상당한 영향을 미칠 수 있다. 기본적으로 활성화하지 않는 것이 좋다.
app.showAboutPanel()
앱의 '정보' 패널을 표시한다. 이 패널의 옵션은 app.setAboutPanelOptions(options)
를 통해 재정의할 수 있다. 이 함수는 비동기적으로 실행된다.
app.setAboutPanelOptions(options)
앱의 정보 패널 옵션을 설정한다. 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()
앱에 전체 샌드박스 모드를 활성화한다. 이 메서드를 사용하면 WebPreferences
의 sandbox
플래그 값과 상관없이 모든 렌더러가 샌드박스 모드로 실행된다.
이 메서드는 앱이 준비되기 전에만 호출할 수 있다.
app.isInApplicationsFolder()
macOS
boolean
타입을 반환한다. 애플리케이션이 현재 시스템의 Applications 폴더에서 실행 중인지 여부를 나타낸다. app.moveToApplicationsFolder()
와 함께 사용한다.
app.moveToApplicationsFolder([options])
macOS
반환 값 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)
config
ProxyConfig
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
Objecthostname
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.json
의 name
필드는 npm 모듈 스펙에 따라 짧은 소문자 이름으로 지정된다. 보통은 productName
필드도 함께 지정하는데, 이 필드는 애플리케이션의 전체 대문자 이름을 나타내며, Electron에서는 name
보다 productName
을 우선적으로 사용한다.
app.userAgentFallback
Electron이 전역적으로 사용할 기본 사용자 에이전트(user agent) 문자열을 나타내는 string
타입의 속성이다.
이 속성은 webContents
나 session
레벨에서 사용자 에이전트가 설정되지 않았을 때 사용된다. 앱 전체가 동일한 사용자 에이전트를 사용하도록 보장하는 데 유용하다. 앱 초기화 단계에서 가능한 한 빨리 커스텀 값으로 설정하여, 오버라이드한 값이 적용되도록 해야 한다.
app.runningUnderARM64Translation
읽기 전용 macOS Windows
이 boolean
값이 true
일 경우, 앱이 현재 ARM64 변환기(예: macOS의 Rosetta Translator Environment 또는 Windows의 WOW)에서 실행 중임을 나타낸다.
이 속성을 사용해 사용자가 Rosetta나 WOW에서 실수로 x64 버전의 애플리케이션을 실행 중일 때, ARM64 버전을 다운로드하도록 안내할 수 있다.