2026년 기업 Mac CI: Fastlane match와 codesign 운영

다중 저장소에서 codesign은 키체인·프로파일·embedded.mobileprovision 경합으로 실패가 잦습니다. Fastlane match는 Git 단일 진실원을 주고, 수동 인증서는 회전·감사가 어렵습니다. App Store Connect API는 업로드·메타와 서명 자재를 분리하세요. Apple Silicon 고메모리 공유 노드에서 읽기 전용·임시 키체인·NVMe를 정리합니다. 디스크는 DerivedData·SwiftPM 디스크 FAQ, 큐 설계는 기업 iOS CI 하이브리드 분류 FAQ를 참고하세요.

1. match·수동 인증서·ASC API: 역할을 나누기

match는 배포용 인증서·프로비저닝을 Git에 암호화 저장하고 Job마다 동일 스냅샷을 내려받게 합니다. 수동은 소수 키를 운영자가 직접 교체·배포하므로 회전 주기·보관 매체가 곧 리스크입니다. App Store Connect API는 업로드·TestFlight·메타 변경에 쓰고, 서명 자재는 match나 내부 비밀 저장소와 분리 토큰으로 묶으세요. 한 Job에 모든 권한을 합치지 않는 것이 감사·최소 권한에 유리합니다.

실무 팁: API 키 JSON은 러너 이미지에 박지 말고 짧은 TTL 시크릿으로 주입하고, match 패스프레이즈는 별도 KMS 경로로만 풉니다.

2. 읽기 전용 모드와 암호화 Git 동기화

공유 노드에서는 git clone --depth 1 후 작업 트리만 쓰기 가능하게 두고, 인증서 디렉터리는 읽기 전용 마운트로 고정합니다. 여러 Job이 동시에 pull하면 객체 디렉터리에 쓰기 경합이 나므로, 노드 로컬에 미러 클론+락을 두고 Job은 그 위에서 얕은 복사만 하게 하면 NVMe 랜덤 쓰기가 줄어듭니다. PR마다 브랜치·태그 규칙을 강제하면 롤백과 재현이 쉬워집니다.

3. 임시 키체인: 생성·잠금 해제·삭제 루프

Job 시작 시 security create-keychain로 전용 파일을 만들고 잠금 시간을 짧게 둡니다. security unlock-keychain은 CI 비밀로만 호출하고, 종료 시 security delete-keychain으로 정리하세요. 기본 로그인 키체인을 건드리면 다음 Job에 자격 증명이 섞입니다.

4. codesign 동시성: 세마포와 코어 슬라이스

codesign은 CPU보다 키체인·파일 메타데이터 경합에 민감합니다. 노드 전역 세마포로 동시 서명 개수를 제한하고, Runner의 concurrency와 맞춰 I/O 피크를 평탄화하세요. 저장소별로 서명 단계를 직렬화하고, 컴파일은 병렬 유지하는 식으로 큐를 쪼개면 고메모리 이점을 살립니다.

5. NVMe 피크를 메모리 친화적으로

인증서 캐시·spm 캐시·DerivedData를 서로 다른 APFS 볼륨에 두면 피크가 겹치지 않습니다. match 산출물은 노드 로컬 NVMe에 두고 Job 종료 시 삭제하면 NAS 대비 지연이 안정됩니다. 디스크 여유 임계값으로 큐를 자동 축소하세요.

6. 적용 FAQ

  • match와 수동을 같이 쓰면? 한 저장소·한 브랜치 정책으로 통일하세요. 이중 경로는 만료 시점이 어긋나 서명 오류를 만듭니다.
  • API 키만으로 서명되나? 아니요. 업로드 권한과 배포 프로파일·개인키는 별도 자재입니다.
  • 공유 노드에서 키체인 경고가 반복되면? 기본 키체인을 건드렸는지, 잠금 해제 타임아웃인지부터 확인하세요.

Mac mini·macOS로 서명 파이프라인을 고정하기

Apple Silicon 통합 메모리는 다중 codesign과 인덱싱에 유리하고, macOS는 Gatekeeper·SIP·FileVault로 무인 러너의 표면 공격을 줄입니다. NVMe와 낮은 유휴 전력의 Mac mini M4는 야간 Archive·주간 PR을 한 노드에 얹기 좋습니다.

임시 키체인·match 캐시 레이아웃을 전용 Mac에서 먼저 재현한 뒤 풀로 확장하세요. 전용 하드웨어 옵션은 Macstripe 홈에서 비교할 수 있습니다. Mac mini M4로 기준선을 잡으면 서명 실패 재현과 비용 통제가 한결 수월해집니다.