문서로 돌아가기
배포
macOS 배포
서명, 공증, DMG 패키징, 업데이터 아티팩트.
•
10분 읽기
•macOS에서 배포하려면 코드 서명, 공증, 적절한 패키징이 필요합니다. 이 문서는 PlanToCode의 전체 프로세스를 다룹니다.
코드 서명
모든 바이너리는 Apple Developer ID로 서명해야 합니다:
- 앱 서명을 위한 Developer ID Application 인증서
- PKG 서명을 위한 Developer ID Installer 인증서
- CI 시크릿에 저장되고 키체인으로 가져온 인증서
- 공증 호환성을 위해 활성화된 강화된 런타임
권한
PlanToCode 기능에 필요한 권한:
com.apple.security.cs.allow-jitcom.apple.security.cs.allow-unsigned-executable-memorycom.apple.security.device.audio-inputcom.apple.security.network.clientcom.apple.security.files.user-selected.read-write
빌드 프로세스
서명된 릴리스를 빌드하는 단계:
- pnpm tauri build --target universal-apple-darwin 실행
- Tauri가 환경에서 APPLE_SIGNING_IDENTITY로 서명
- Intel + ARM을 위해 lipo로 유니버설 바이너리 생성
- 커스텀 배경과 레이아웃으로 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.appspctl --assess --verbose PlanToCode.appstapler validate PlanToCode.dmgxcrun notarytool log <submission-id>