d3ro-voice/apps/desktop/electron-builder.yml

127 lines
4.7 KiB
YAML

appId: com.d3ro.voice
productName: D3RO Voice
copyright: Copyright © 2026 D3RO
# monorepo(npm workspaces)에서 electron이 루트 node_modules로 호이스팅되어
# 자동 감지가 실패하는 문제를 피하려고 명시적으로 버전 고정.
electronVersion: "33.3.0"
directories:
buildResources: resources
output: release/${version}
files:
- out/**/*
- "!out/**/*.map"
# native 모듈은 asar 외부에 배치
asarUnpack:
- "node_modules/better-sqlite3/**"
- "node_modules/uiohook-napi/**"
- "node_modules/@nut-tree-fork/**"
# ────────────────────────────────────────────────────────────────────
# Windows
# ────────────────────────────────────────────────────────────────────
win:
target:
- target: nsis
arch:
- x64
icon: resources/icons/icon.ico
# ────────────────────────────────────────────────────────────────────
# macOS
# ────────────────────────────────────────────────────────────────────
mac:
category: public.app-category.productivity
icon: resources/icons/icon.icns
target:
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
hardenedRuntime: true
gatekeeperAssess: false
entitlements: build/entitlements.mac.plist
entitlementsInherit: build/entitlements.mac.plist
# notarize: 환경변수 APPLE_ID / APPLE_APP_SPECIFIC_PASSWORD / APPLE_TEAM_ID 설정 시 활성화.
# CI/dev 환경에서는 NOTARIZE=false로 스킵 가능.
notarize: false
extendInfo:
NSMicrophoneUsageDescription: "D3RO Voice는 음성 인식을 위해 마이크 접근이 필요합니다."
NSCameraUsageDescription: "D3RO Voice는 스크린 컨텍스트 캡처를 위해 화면 녹화 권한이 필요합니다."
NSAppleEventsUsageDescription: "D3RO Voice는 활성 앱 정보를 가져오기 위해 다른 앱 제어 권한이 필요합니다."
NSSystemAdministrationUsageDescription: "D3RO Voice는 전역 핫키 등록을 위해 접근성 권한이 필요합니다."
dmg:
writeUpdateInfo: false
contents:
- x: 130
y: 220
- x: 410
y: 220
type: link
path: /Applications
# ────────────────────────────────────────────────────────────────────
# Linux (참고용)
# ────────────────────────────────────────────────────────────────────
linux:
target:
- AppImage
category: Utility
icon: resources/icons/icon.png
# ────────────────────────────────────────────────────────────────────
# 공통 리소스 번들
# ────────────────────────────────────────────────────────────────────
extraResources:
# 효과음 (플랫폼 공통)
- from: resources/sounds/
to: sounds/
filter:
- "*.wav"
# 앱 아이콘 (트레이 등 런타임에서 참조)
- from: resources/icons/
to: icons/
filter:
- "**/*"
# SoX 바이너리 (번들되어 있으면 번들, 없으면 시스템 PATH)
- from: resources/sox/
to: sox/
filter:
- "**/*"
# Python sidecar (PyInstaller 빌드 결과)
# 빌드 전: python scripts/build-sidecar.py (플랫폼에서 개별 실행)
- from: sidecar-dist/sidecar/
to: sidecar/
filter:
- "**/*"
# Ollama 바이너리
# 빌드 전: powershell scripts/download-ollama.ps1 (Windows)
# bash scripts/download-ollama.sh (macOS/Linux)
# 번들된 ollama가 있으면 LocalLLMService가 1순위로 사용.
- from: resources/ollama/
to: ollama/
filter:
- "**/*"
nsis:
oneClick: false
perMachine: false
allowToChangeInstallationDirectory: true
createDesktopShortcut: true
createStartMenuShortcut: true
shortcutName: D3RO Voice
deleteAppDataOnUninstall: false
include: build/installer.nsh
npmRebuild: true