2026-04-22 헤드리스 임대 클라우드 Mac에서의 iOS 키체인과 프로비저닝 위생(CI 서명)
릴리스 매니저와 iOS CI 소유자가 SSH로 Apple Silicon Mac을 임대하면 같은 벽에 부딪친다: 로컬에서는 Archive가 성공하지만 원격 빌더에서는 errSecInternalComponent, “서명 인증서 없음”, 오래된 프로비저닝 UUID가 보인다. 이 2026-04-22 가이드는 HK / JP / KR / SG / US에서 무인 작업을 위해 로그인 키체인, 프로비저닝 프로파일, codesign 아이덴티티를 맞추는 방법을 설명한다. 비교 표 2개, 강화된 SSH 워크플로, NVMe 수치 예산, 그리고 자동 vs 수동 서명, 보내기와 ASC API, 병렬 xcodebuild 링크를 제공한다.
헤드리스 빌더의 실패 표면
UI 프롬프트가 있는 노트북과 달리 임대 클라우드 Mac은 비대화형 셸에서 xcodebuild를 자주 실행한다. 가장 흔한 균열은 세 층으로 정리된다: 키체인 상태, 프로파일 신선도, 아이덴티티 불일치.
| 증상 | 전형적 원인 | 1차 계측 |
|---|---|---|
codesign 중 errSecInternalComponent |
로그인 키체인 잠금 또는 개인키 사용 거부 | security list-keychains + CI 사용자 잠금 해제 감사 |
| 프로파일이 “서명 인증서를 포함하지 않음” | 디스크 UUID ≠ 타깃에 임베드된 프로파일 | ~/Library/MobileDevice/Provisioning Profiles와 Xcode 보고서 비교 |
| 브랜치 A는 성공, B는 실패 | 동일 CN의 여러 아이덴티티, 잘못된 선택 | security find-identity -v -p codesigning + 명시적 CODE_SIGN_IDENTITY |
xcodebuild archive마다 120–320GB의 빠른 NVMe를 예산한다——dSYM 보존 크래시 파이프라인 참고.
서명 모드: 의사결정 매트릭스
키체인을 건드리기 전에 빌더가 자동 서명(Xcode 관리 프로파일)에 의존할지 수동 서명(커밋된 프로파일)에 의존할지 결정한다. 답은 인증서 순환 빈도와 한 호스트를 여러 앱이 공유하는지에 달려 있다.
| 모드 | 가장 좋을 때 | 운영 비용 | SSH 전용 Mac 위험 |
|---|---|---|---|
| 자동 + Xcode 관리 | 빠른 반복, 적은 bundle ID | 프로파일 돌봄 낮음 | 중간—Apple ID 세션 건강에 의존 |
| 수동 + 커밋된 프로파일 | 엔터프라이즈 파이프라인, 재현 가능한 아카이브 | 순환 규율이 더 높음 | 낮음—명시적 UUID와 아이덴티티 |
| 작업별 임시 키체인 | 멀티 테넌트 호스트 | 자동화 작업 최대 | 올바르면 팀 간 누수 최소 |
SSH 세션의 키체인 규율
클라우드 Mac의 CI 사용자는 login.keychain-db를 라이브 DB처럼 다룬다: 가져오기를 소유하는 자동화 주체는 하나뿐이고 잠금 해제는 명시적이어야 한다.
- 사전 점검 — 키체인 목록과 기본 키체인 확인.
- 잠금 해제 — 조직이 승인한 비대화형 잠금 해제(비밀번호는 비밀 관리자에서).
- 목록 분할 —
codesign과productbuild만 개인키에 접근. - 작업 후 — 임시 인증서를 삭제하고 고아 아이덴티티를 가볍게 정리.
security unlock-keychain -p "$KEYCHAIN_PASSWORD" ~/Library/Keychains/login.keychain-db
프로비저닝 프로파일 수명 주기
디스크의 프로파일은 아카이브 시 Xcode가 해석하는 것과 거울이 되어야 한다. 불변 조건:
- 파일명은 UUID:
<UUID>.mobileprovision— 마케팅이 이름을 바꾸면 자동화가 조용히 깨진다. - App Store 배포 프로파일은 T-30 / T-14 / T-7 만료 알람; ASC API로 폴링 작업 지원.
- 갱신 후 대체된 UUID를 삭제해 동일 bundle ID에 여러 개가 맞을 때 “거의 맞는” 선택을 막는다.
이 절은 보내기 옵션과 ASC API와 함께 읽어 녹색 아카이브와 만료된 배포 프로파일 캐시가 공존하는 업로드를 피한다.
아이덴티티, embedded.mobileprovision,보내기
security find-identity -v -p codesigning으로 유효 아이덴티티를 열거한 뒤 CI 매트릭스에서 CODE_SIGN_IDENTITY를 명시적으로 고정한다. IPA보내기 시 아카이브의 임베디드 프로비저닝이 채널(TestFlight vs Ad Hoc)과 일치하는지 확인한다. 크래시 심볼리케이션이 있다면 dSYM 번들과 UUID를 end-to-end로 맞춘다.
비밀 레이아웃과 NVMe 예산
싱가포르와 미국 동부의 다중 프로젝트 팀은 겹치는 아카이브를 자주 예약한다. 분리:
- 서명 루트 — 팀마다 제어된
/var/lib/ci스타일 접두 아래 별도 디렉터리. - DerivedData — 격리 문서처럼 작업별 tmp 루트.
- 아티팩트 보존 — 롤백용 최근 세 그루의
.xcarchive, 오래된 슬라이스는 정리.
병렬 작업을 펼칠 때는 병렬 xcodebuild 지침을 따라 CPU 압력이 키체인 오류를 가리는 서명 재시도를 키우지 않도록 한다.
MacXCode 관련 가이드
전략은 자동 vs 수동 서명, 계정 기초는 도움말, 지역별 전용 서명 호스트는 가격.
FAQ: 키체인과 프로파일
| 질문 | 실무 답 |
|---|---|
| 여러 CI 사용자가 하나의 Apple ID를 공유해야 하나? | 피한다—앱 패밀리별 서비스 계정을 분리하고 분기마다 로그인을 감사한다. |
| VNC가 필요한가? | 최초 신뢰 프롬프트 등에만; 정상 상태는 SSH+로그. VNC 가이드. |
| 서명이 깨졌을 때 가장 빠른 롤백은? | 어제의 프로파일 세트를 버전 관리에서 복원하고 오프라인 백업에서 아이덴티티를 재가져오기—한 번만 다시 빌드. |
Mac mini M4 베어 메탈이 서명 처리량에서 이기는 이유
Apple Silicon Mac mini M4 노드는 암호 연산과 I/O가 로컬 NVMe에 닿고 하이퍼바이저가 인터럽트 예산을 빼앗지 않아 codesign 지연이 예측 가능하다. 아카이브 →보내기 → 업로드를 SLA 아래에서 연결할 때 중요하다. MacXCode의 HK / JP / KR / SG / US 존재감은 테스터 가까이에 서명 호스트를 두면서 동일한 SSH 워크플로를 유지하고, 주간 빌드 팀에는 1–2TB 스토리지 옵션도 있다. 앱이 키보다 빨리 늘면 가격에서 빌더를 추가하고 하나의 키체인에 과부하를 주지 말라.