2026년 기업 Mac CI: Command Line Tools와 전체 Xcode.app, 베어메탈 Apple Silicon

iOS·macOS CI용 원격 베어메탈 Apple Silicon 풀에서 먼저 고르는 것은 CLT만 둘지 Xcode.app 전체를 둘지입니다. CLT는 가볍지만 archive·시뮬레이터 목적지·노트북과 같은 경로 전제가 필요하면 전체 Xcode가 낫습니다. 여기서는 병렬 Archive·xcode-select·시뮬레이터·NVMe를 기준으로만 짚습니다.

1. CLT-only: 얻는 것과 여전히 Apple에 맡겨야 할 것

CLT-only는 SwiftPM·정적 분석·시뮬 없는 xcodebuild build에 적합합니다. SDK는 여전히 Apple 패키지에 의존합니다. 시뮬 목적지·Instruments·Xcode.app/Contents/Developer 고정 스크립트가 나오면 간헐 실패 전에 Xcode.app이 필요합니다. 시뮬 없는 게이트에 합의된 경우에만 CLT를 기본값으로 두세요.

경험칙: 시뮬 목적지와 Xcode.app 경로 하드코딩이 없으면 CLT 후보, 첫 예외면 Xcode.app 쪽으로 기울입니다.

2. 베어메탈 전체 Xcode.app: 다중 저장소 병렬 Archive

Xcode.app 전체archive·보내기에 보수적입니다. 병렬 다중 저장소는 저장소별 DERIVED_DATA_PATH와 체크아웃 잠금으로 증분 충돌을 막습니다. codesign·키체인 격리는 병렬 codesign·작업 공간 격리 FAQ를 보세요.

3. 시뮬레이터 런타임: 디스크·RAM, CLT가 대체하지 못하는 이유

시뮬 런타임은 디스크·RAM을 크게 쓰고 제품마다 iOS 소수 버전이 갈리면 곱으로 늘어납니다. Xcode Cloud·QA와 맞추려면 전체 Xcode가 정석이고, CLT-only는 시뮬을 빼거나 수동 설치로 매트릭스가 흔들립니다. NVMe는 작업 공간+런타임+DerivedData를 묶어 보고, 장애 주엔 여유가 빠르게 녹습니다.

4. xcode-select 드리프트: 무인 호스트의 조용한 파손

xcode-select -s는 전역이라 스크립트·SSH 한 번에 무인 러너가 엉뚱한 SDK를 물 수 있습니다. Job마다 DEVELOPER_DIR을 래퍼에 넣고 시작 로그에 경로를 남기세요. 비대화형 셸·plist PATH도 Job과 동일하게 맞춥니다.

5. NVMe 발자국: CLT-only vs Xcode+시뮬레이터

툴체인·런타임·일시 변동 세 덩어리로 계획하세요. CLT는 툴체인을 줄이고 Xcode+시뮬은 런타임이 지배합니다. 일시 변동은 병렬 Job·브랜치 폭에 비례합니다. 고 I/O·큐·디스크 확장은 대용량 저장소·디스크 확장 FAQ와 같이 봅니다. NVMe는 순차 피크보다 큐·지속 쓰기와 RAM으로 중복을 줄이는 쪽이 벽시계에 유리합니다.

  • CLT: 이미지 작음·시뮬 금지 설명 쉬움 — Archive·시뮬 동등성 리스크.
  • Xcode+병렬: DerivedData를 툴체인과 볼륨 분리하면 만재로 전 레인 중단을 줄입니다.

6. 플랫폼 오너용 선정 체크리스트

보안·재무 문서에 넣을 최소 질문입니다.

  • 매트릭스가 시뮬 목적지를 모두 요구하는가?
  • 다중 Xcode에서 DEVELOPER_DIR을 Job마다 어떻게 고정하는가?
  • 최악 병렬 Archive와 NVMe 여유 30~40%·런타임 정리 소유자는 누구인가?

베어메탈 Apple Silicon CI는 Mac mini급에 두는 이유

CLT·Xcode 혼합 풀 모두 Apple Silicon의 예측 성능·통합 메모리 대역·낮은 대기 전력이 유리합니다. Mac minimacOS는 Unix 툴체인·Gatekeeper·SIP·FileVault로 무인 빌드에 익숙한 보안 모델을 주고, SSH·VNC로 책상 Mac과 같은 접근을 유지합니다.

다중 저장소 xcodebuild와 시뮬 무거운 매트릭스에는 Mac mini M4가 실용적인 출발점입니다. DEVELOPER_DIR·NVMe 여유를 먼저 갖춘 뒤 확장하세요. 전용 노드가 필요하면 Macstripe 홈에서 리전·모델을 비교해 보시기 바랍니다.