문서로 돌아가기
배포

macOS 배포

서명, 공증, DMG 패키징, 업데이터 아티팩트.

10분 읽기

macOS에서 배포하려면 코드 서명, 공증, 적절한 패키징이 필요합니다. 이 문서는 PlanToCode의 전체 프로세스를 다룹니다.

코드 서명

모든 바이너리는 Apple Developer ID로 서명해야 합니다:

  • 앱 서명을 위한 Developer ID Application 인증서
  • PKG 서명을 위한 Developer ID Installer 인증서
  • CI 시크릿에 저장되고 키체인으로 가져온 인증서
  • 공증 호환성을 위해 활성화된 강화된 런타임

권한

PlanToCode 기능에 필요한 권한:

  • com.apple.security.cs.allow-jit
  • com.apple.security.cs.allow-unsigned-executable-memory
  • com.apple.security.device.audio-input
  • com.apple.security.network.client
  • com.apple.security.files.user-selected.read-write

빌드 프로세스

서명된 릴리스를 빌드하는 단계:

  1. pnpm tauri build --target universal-apple-darwin 실행
  2. Tauri가 환경에서 APPLE_SIGNING_IDENTITY로 서명
  3. Intel + ARM을 위해 lipo로 유니버설 바이너리 생성
  4. 커스텀 배경과 레이아웃으로 DMG 패키징

유니버설 바이너리

PlanToCode는 유니버설 바이너리로 제공됩니다:

  • 단일 .app이 Intel과 Apple Silicon 모두 지원
  • --target universal-apple-darwin으로 빌드
  • 약간 더 큰 바이너리지만 더 간단한 배포
  • 두 아키텍처 모두에서 네이티브 성능

공증

Gatekeeper 승인을 위해 Apple 공증이 필요합니다:

  • Apple 공증 서비스에 DMG 제출
  • App Store Connect 자격 증명과 함께 notarytool 사용
  • 스테이플링으로 공증 티켓을 DMG에 첨부
  • 프로세스는 일반적으로 1-5분 소요

인앱 업데이트

tauri-plugin-updater가 자동 업데이트를 처리합니다:

  • 실행 시 업데이트 엔드포인트 확인
  • 백그라운드에서 새 버전 다운로드
  • 적용을 위해 재시작 프롬프트
  • 설치 전 서명 검증

업데이트 매니페스트

latest.json이 사용 가능한 업데이트를 설명합니다:

  • version: 시맨틱 버전 문자열
  • platforms.darwin-universal: URL과 서명
  • notes: markdown의 릴리스 노트
  • pub_date: ISO 8601 게시 타임스탬프

일반적인 함정

자주 발생하는 이슈:

  • CI 중 키체인 잠금: 서명 전에 잠금 해제
  • 공증 타임아웃: 지수 백오프로 재시도
  • 잘못된 서명: 권한이 기능과 일치하는지 확인
  • Gatekeeper 거부: 공증이 올바르게 스테이플되었는지 확인

검증 명령

서명과 공증을 검증하는 명령:

  • codesign -dv --verbose=4 PlanToCode.app
  • spctl --assess --verbose PlanToCode.app
  • stapler validate PlanToCode.dmg
  • xcrun notarytool log <submission-id>