공증은 Apple이 바이너리를 스캔했음을 증명합니다. 스테이플링(stapling)은 티켓을 포함시켜 Gatekeeper가 오프라인에서 검증할 수 있게 합니다. 결정 없이 “항상 스테이플”하면 매 빌드에 몇 분을 씁니다. “절대 스테이플 안 함”은 에어갭 랩에서 고생합니다. Mac mini M4 CI 러너—특히 NodeMac이 홍콩·일본·한국·싱가포르·미국에서 제공하는 전용 호스트—에는 스테이플 정책을 배포 채널, 네트워크 가정, 아티팩트 유형에 묶는 매트릭스를 공개하세요. 이 글은 두 매트릭스, 여덟 단계, 보안 검토자가 파이프라인을 읽는 방식에 맞춘 FAQ 구조화 데이터를 제공합니다.
스토리지·보존 맥락: 디스크 및 아티팩트 보존, 잠금 파일 해시 캐시. 서명된 두 트리를 GUI로 비교하려면 동일 NodeMac 호스트에서 VNC를 사용하세요. 가격; 도움말.
Gatekeeper: 온라인 티켓 조회 vs 스테이플된 티켓
macOS는 공증에 성공해도 티켓이 스테이플되지 않고 최초 실행 시 Apple 서비스에 닿지 못하면 사용자에게 놀라움을 줍니다. 반대로 스테이플링은 외부 컨테이너(예: .dmg)를 바꾸므로 너무 이른 해시 계산이 단순 체크섬 게이트를 무효화합니다. CI 정책은 감사 아티팩트로서의 체크섬(스테이플 전)과 고객에게 배송하는 blob(스테이플 후)을 명시해야 합니다.
- 티켓만: 랩 Mac의 이그레스가 안정적이고 재검 정책을 통제할 때 반복이 가장 빠릅니다.
- 스테이플됨: 고객용 디스크 이미지, 오프라인 설치 프로그램, 현장 노트북의 기본값입니다.
- 하이브리드: 릴리스 채널만 스테이플;나이틀리는 명시 배너와 함께 티켓만 유지합니다.
매트릭스 A: 배포 경로별 스테이플 vs 티켓
| 아티팩트 및 경로 | 스테이플? | 근거 |
|---|---|---|
| 개발자 USB 키오스크 .dmg | 예 | 오프라인 Gatekeeper 경로;최초 실행 CDN 의존 회피 |
| 유선 랩의 CI 스모크 설치 | 선택 | 이그레스가 모니터링되고 실패 허용 시 티켓만이 루프를 가속 |
| MDM 전달 pkg와 설치 후 스테이플 | 둘 다 | 파이프라인 vs MDM 중 누가 스테이플하는지 문서화해 중복 방지 |
| App Store 업로드 파이프라인 | Apple 전송 문서 준수 | 소비자 경로가 다름;데스크톱 DMG 규칙을 맹목 복제 금지 |
매트릭스 B: CI 단계 순서와 검증
| 단계 | 명령군 | 통과 기준 |
|---|---|---|
| 서명 | codesign 엔타이틀먼트 매트릭스에 따른 강화 런타임 플래그 |
codesign --verify --deep --strict 깨끗 |
| 공증 | notarytool submit + 폴링 |
로그에 Accepted;제출 ID 보관 |
| 스테이플 | xcrun stapler staple |
깨끗한 VM에서 stapler validate OK |
| 스모크 | 마운트된 이미지에서 앱 실행 | “손상됨” 대화 없음;텔레메트리가 예상 버전과 일치 |
수치 가드레일
- 타임아웃 예산: 릴리스 트레인은 notary 폴링에 최소 25분 벽시계;기능 브랜치는 플레이크 허용 시 더 짧게 가능.
- 병렬 제출: 호스트당 동시 공증 잡을 2로 상한—Xcode 피크와 Apple 측 스로틀 충돌 방지.
- 아티팩트 불변성: 스테이플된 객체는 새 객체 키로 업로드;제자리 덮어쓰기 금지.
감사 팁: 변경 티켓에 공증 제출 ID와 스테이플 전 아티팩트의 SHA-256을 함께 첨부하세요. 스테이플링은 서명 로그를 대체하지 않습니다.
여덟 가지 롤아웃 단계
- 채널 목록화 각 빌드 유형이 어디로 배송되는지(랩, 고객, MDM).
- 매트릭스 코드화 Slack의 부족한 지식이 아니라 파이프라인 템플릿에.
- 잡 분할 빌드/서명, 공증, 스테이플, 게시를 별도 단계와 별도 캐시로.
- VM 스모크 추가 선택적으로 아웃바운드 Apple 엔드포인트를 끄고 누락된 스테이플 탐지.
- 로그 저장 notarytool을 다른 서명 증거와 동일 보존 버킷에.
- 서명 인증서 로테이션 캘린더로;매 로테이션 후 매트릭스 검증 재실행.
- 온콜 교육 stapler 오류와 notarytool 오류는 담당이 다릅니다.
- 지역별 전용 M4 큐 시간이 위험한 지름길을 강요할 때—NodeMac은 하드웨어 경쟁을 정책 논쟁에서 제거합니다.
FAQ
CI는 언제 스테이플해야 하나요?
사용자가 오프라인으로 설치하거나 통제되지 않은 네트워크에서 설치할 때. 잘 연결된 내부 루프이고 문서화되어 있으면 티켓만 유지해도 됩니다.
스테이플링이 체크섬 캐시를 깨나요?
예—감사는 스테이플 전에 해시;스테이플 후 blob은 별도 체크섬으로 배송 아티팩트로 취급합니다.
stapler가 너무 이르면?
Gatekeeper가 손상된 앱으로 거부합니다. 서명 → 공증 → 검증 → 스테이플 → 검증 순서를 강제하세요.