1. iOS CI/CD에 실제 Mac이 필요한 이유
iOS 코드 서명은 macOS 기본 환경에 의존합니다. Xcode 15부터 Apple Silicon 네이티브 컴파일이 필수이며, 가상 머신 및 컨테이너 방식에 대한 제한이 늘어나고 있습니다. 이 가이드는 코드 커밋부터 App Store 심사까지 재현 가능한 전체 파이프라인을 설명합니다.
1.1 Apple Silicon 핵심 제약
- xcodebuild
- 네이티브 ARM64 시스템에서 실행해야 합니다. Xcode 15 이상에서는 Rosetta 2 변환이 Simulator 및 archive 워크플로우를 완전히 지원하지 않습니다.
- notarytool
- 공증(notarization)에는 유효한 Apple Developer 인증서와 Apple 서버에 대한 실시간 네트워크 연결이 필요합니다.
- codesign
- 키체인(Keychain) 접근은 영구적인 세션 내에서 이루어져야 합니다. CI 단기 프로세스는
security unlock-keychain단계가 필요합니다.
1.2 자체 Mac mini 룸의 문제점
Mac mini 룸을 자체 운영하는 주요 문제:초기 하드웨어 조달 비용이 높음→ 2026년에는 일일 렌탈 클라우드 Mac이 대안으로 등장- 운영팀이 24/7 대기 필요
- 릴리스 피크 시 탄력적 확장 불가
2. 도구 선택
2.1 서명 관리 도구 비교
| 도구 | 적합한 시나리오 | 인증서 저장소 | 장점 | 단점 |
|---|---|---|---|---|
| Fastlane match | 팀원 ≥ 2명 | Git / S3 | 통합 관리, CI 친화적 | Git 저장소 접근 권한 필요 |
| Xcode 자동 서명 | 개인 개발자 | 로컬 키체인 | 제로 설정 | 다중 머신 동기화 어려움 |
| 수동 provisioning | 엔터프라이즈 배포 | 수동 관리 | 완전한 제어 | 유지보수 비용 매우 높음 |
2.2 Fastlane lane 예시
platform :ios do
lane :beta do
match(type: "appstore", readonly: true)
build_app(scheme: "MyApp", export_method: "app-store")
upload_to_testflight(skip_waiting_for_build_processing: true)
end
end
3. 환경 준비: 일일 Mac M4 PoC
원격 Mac 접근 권한을 받은 후 순서대로 검증합니다:
- SSH 로그인:
uname -m이arm64를 반환하는지 확인 - Xcode 버전:
xcodebuild -version으로 대상 버전 확인 - Fastlane 설치:
gem install fastlane - 테스트 빌드: 샘플 프로젝트에서
xcodebuild build실행, 소요 시간 기록
3.1 일반적인 오류 해결
오류: No signing certificate found
fastlane match appstore --readonly false를 실행하여 인증서를 다시 가져옵니다. Cmd+Space로 Spotlight를 열고 Keychain Access를 검색하여 Apple CA 존재를 확인합니다.
오류: 공증 타임아웃
Apple의 공증 서비스에서 대기열 지연이 발생할 수 있습니다. 일반적으로 5~15분 내에 완료됩니다. CI 파이프라인에 타임아웃 및 재시도 로직을 구현하세요.
4. 성능 및 비용 최적화
4.1 병렬 빌드 매트릭스
| 시나리오 | 권장 구성 | 예상 시간 |
|---|---|---|
| 단일 아키텍처 Debug | M4 16GB × 1 | 3~5분 |
| 다중 시뮬레이터 병렬 테스트 | M4 24GB × 1 | 8~12분 |
| Release + Archive | M4 16GB × 1 | 6~10분 |
4.2 비용 관리
- 일일 PoC: 먼저 1~3일간 파이프라인을 검증한 후 주간/월간으로 업그레이드
고정 월간 M1 플랜→ M4 일일 렌탈은 경쟁력 있는 가격으로 성능이 크게 향상됨
요약
iOS 18 CI/CD 핵심 단계:
- 일일 Mac M4 렌탈로 PoC 완료
- Fastlane match로 서명 인증서 통합 관리
- App Store Connect API Key로 무인 공증 구현