feat(V2-5): macOS 빌드 지원 — 플랫폼 분기 + electron-builder mac 타겟 + CI
플랫폼 분기 (paths.ts): - EXE_SUFFIX 상수로 sox/sidecar/ffmpeg 실행파일 확장자 통합 - Windows에선 .exe 자동 부착, Mac/Linux에선 빈 문자열 - 미사용 getProjectRoot 헬퍼 제거 런타임 서비스 Mac 분기: - SoundEffectService: darwin → /usr/bin/afplay, linux → aplay 분기 추가 (execFile로 안전하게) - ScreenContextService._getActiveWindowInfo: win32 → PowerShell + user32.dll (기존), darwin → osascript (System Events frontmost process + 윈도우 타이틀) Linux는 미지원 (null) electron-builder.yml: - mac 타겟 추가 (dmg + zip, arm64 + x64 매트릭스) - hardenedRuntime, gatekeeperAssess, entitlements 설정 - extendInfo로 NSMicrophoneUsage / NSCameraUsage / NSAppleEvents / NSSystemAdministration 권한 메시지 - dmg 레이아웃 (드래그 to /Applications) - linux AppImage placeholder - notarize: false 기본, NOTARIZE 환경변수로 활성화 build/entitlements.mac.plist: - allow-jit, allow-unsigned-executable-memory (Electron 필수) - audio-input, camera, network.client - automation.apple-events (활성 윈도우 조회용) - files.user-selected.read-write - allow-dyld-environment-variables (sox/ffmpeg 라이브러리 로드) scripts/build-sidecar.py: - IS_WINDOWS / IS_MACOS / EXE_SUFFIX 도입 - Windows에서만 --noconsole 플래그 - 빌드 결과 경로 + size 출력 플랫폼 통합 scripts/install-sox.sh (신규): - Mac/Linux용 SoX 번들 스크립트 - macOS는 otool로 dylib 의존성 식별 후 함께 복사, install_name_tool로 rpath를 @loader_path로 변경 - electron-builder의 extraResources 대상 디렉토리에 배치 resources/icons/ (신규): - README.md만 커밋, 실제 아이콘 파일은 분리 - sips/iconutil/imagemagick으로 .icns/.ico/.png 생성 가이드 .github/workflows/build-mac.yml (신규): - macos-14 runner (Apple Silicon), arm64/x64 matrix - brew sox, npm install, @electron/rebuild, install-sox.sh, build-sidecar.py, electron-builder dist - CSC/NOTARIZE 환경변수 자동 처리 - artifact 업로드 (dmg + zip, retention 7일) docs/v2/phase-V2-5-mac-guide.md (신규): - 사전 조건, 시스템 의존성, dev 실행, dist 빌드, Code signing + Notarization, CI 트리거, 트러블슈팅 검증 (Windows에서): - typecheck 통과 (Mac 분기 추가에도 회귀 없음) - build 통과 - dev 런타임 정상 Mac 검증은 사용자 본인 Mac에서 수행 (V2-5 사용자 액션).
This commit is contained in:
parent
97eb886ec3
commit
77d514222e
12 changed files with 780 additions and 79 deletions
|
|
@ -7,11 +7,14 @@
|
|||
|
||||
**V1 (Electron) 완료** → **V2 (Monorepo) 진행 중**
|
||||
- Phase V2-1 ✅ 완료 (Monorepo 전환 — a/b/c/d)
|
||||
- Phase V2-2 🟡 로컬 작업 완료, 사용자 액션 대기
|
||||
- SQL 마이그레이션 4개 파일 + Edge Functions 2개 스캐폴딩 작성 완료
|
||||
- Supabase 프로젝트 생성/OAuth 등록/배포는 사용자가 직접 수행
|
||||
- 가이드: `docs/v2/phase-V2-2-setup.md`
|
||||
- 다음: Phase V2-3 (Web App MVP — Next.js)
|
||||
- Phase V2-2 🟡 로컬 작업 완료, 사용자 Supabase 배포 대기
|
||||
- Phase V2-5 🟡 로컬 작업 완료, 사용자 Mac 검증 대기
|
||||
- paths.ts 플랫폼 분기, electron-builder.yml mac 타겟, entitlements,
|
||||
SoundEffectService(afplay)/ScreenContextService(AppleScript) Mac 분기,
|
||||
build-sidecar.py 크로스 플랫폼, install-sox.sh, GitHub Actions Mac CI
|
||||
- 가이드: `docs/v2/phase-V2-5-mac-guide.md`
|
||||
- 다음: Phase V2-3 (Web App MVP — Next.js) 또는 V2-4 (데스크톱 동기화)
|
||||
- V2-2 사용자 액션이 끝나면 V2-3 진행 가능
|
||||
|
||||
## V1 완료 페이즈
|
||||
|
||||
|
|
@ -173,8 +176,44 @@
|
|||
- **Realtime**: `transcripts` 테이블만 `supabase_realtime` publication에 추가 (회의 중 세그먼트 동기화 용).
|
||||
- **Edge Functions placeholder**: 인증/쿼터 파이프라인은 완성, 실제 AI API 호출은 주석 처리된 실제 구현 코드 포함. V2-3 (Web MVP) 진행 전까지 유지.
|
||||
|
||||
### Phase V2-3~V2-8: 미착수
|
||||
Web App MVP, 데스크톱 동기화, Mac 빌드, Mobile App, 팀 기능, 결제/출시
|
||||
### Phase V2-5: Mac 빌드 — 로컬 작업 완료
|
||||
|
||||
**작성/수정된 파일**
|
||||
- `apps/desktop/src/main/utils/paths.ts` — `EXE_SUFFIX` 상수 도입, sox/sidecar/ffmpeg 경로 플랫폼별 분기
|
||||
- `apps/desktop/src/main/services/SoundEffectService.ts` — Mac `afplay`, Linux `aplay` 분기 추가 (execFile로 안전하게)
|
||||
- `apps/desktop/src/main/services/ScreenContextService.ts` — `_getActiveWindowInfo`를 win32/darwin로 분기. macOS는 `osascript`로 frontmost process + 윈도우 타이틀 조회 (Accessibility 권한 필요)
|
||||
- `apps/desktop/scripts/build-sidecar.py` — `IS_WINDOWS`/`IS_MACOS` 분기, `EXE_SUFFIX`, `--noconsole`은 Windows에서만, 출력 경로 플랫폼 통합
|
||||
- `apps/desktop/scripts/install-sox.sh` — Mac/Linux에서 시스템 sox를 `resources/sox/`로 복사. macOS는 `otool`로 dylib 의존성 함께 복사 + `install_name_tool`로 rpath 변경
|
||||
- `apps/desktop/electron-builder.yml` — `mac:` 타겟 추가 (dmg+zip, arm64+x64), `hardenedRuntime`, `entitlements`, `extendInfo`(권한 메시지), Linux AppImage placeholder
|
||||
- `apps/desktop/build/entitlements.mac.plist` — 마이크/카메라/네트워크/Apple Events/JIT/dylib 권한
|
||||
- `apps/desktop/resources/icons/README.md` — 플랫폼별 아이콘 생성 가이드 (sips/iconutil/imagemagick)
|
||||
- `.github/workflows/build-mac.yml` — macos-14 runner, brew sox, sidecar 빌드, electron-builder dist (arm64/x64 매트릭스), CSC/notarize 환경변수, artifact 업로드
|
||||
- `docs/v2/phase-V2-5-mac-guide.md` — Mac 사전 조건/dev 실행/dist 빌드/서명/공증/CI/트러블슈팅
|
||||
|
||||
**검증 결과 (Windows에서)**
|
||||
- typecheck ✅ — Mac 분기 추가에도 회귀 없음
|
||||
- build ✅ — Windows 번들 정상
|
||||
- dev 런타임 ✅ — Ollama 자동 실행 + 모든 서비스 정상
|
||||
|
||||
**Mac에서 검증 대기 (사용자 액션)**
|
||||
- `brew install sox node@22 python@3.11`
|
||||
- `npm install && npx @electron/rebuild@3 --version=33.4.11`
|
||||
- `npm run dev` → Accessibility/마이크/Apple Events 권한 허용
|
||||
- 핫키, 녹음, STT, LLM, 화면 컨텍스트 동작 확인
|
||||
- 결과 리포트 받아 미세 조정 필요할 수 있음
|
||||
|
||||
**감사 결과 vs 처리**
|
||||
- C1 sox.exe/sidecar.exe/ffmpeg.exe 하드코딩 → ✅ 수정
|
||||
- C2 아이콘 부재 → ✅ placeholder 디렉토리 + README
|
||||
- C3 mac 타겟 부재 → ✅ 추가
|
||||
- C4 SoX 바이너리 부재 → ✅ install-sox.sh + 가이드
|
||||
- C5 ScreenContextService 미지원 → ✅ AppleScript 분기
|
||||
- C6 SoundEffectService 미지원 → ✅ afplay 분기
|
||||
- C7 build-sidecar.py Windows 전제 → ✅ 크로스 플랫폼
|
||||
- M6/M7/M8/M9 (이미 분기 완료) → 변경 없음
|
||||
|
||||
### Phase V2-3/V2-4/V2-6/V2-7/V2-8: 미착수
|
||||
Web App MVP, 데스크톱 동기화, Mobile App, 팀 기능, 결제/출시
|
||||
|
||||
## 알려진 차단/이슈
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue