2026 Flutter/React Native: iOS 작업만 macOS 클라우드, Linux와 섞는 CI 매트릭스와 임계값
Dart/TypeScript 모노레포일수록 Android가 Linux에서 돌아간다고 iOS도 같은 Runner에 넣고 싶지만 서명·Xcodeproj·Simulator는 2026년에도 macOS 전제가 강하다. 본문은 세 가지 비용, Linux/macOS 단계 표, Runner 태그·artifact 계약을 포함한 일곱 단계, 디스크·큐 SLO용 수치, 그리고 Linux iOS 한계 FAQ와 다중 Xcode 운영 글과의 역할 분담 FAQ를 정리한다.
목차
1. iOS를 Linux처럼 돌릴 때 세 가지 대가
모바일을 백엔드와 같은 쿠버네티스 감각으로 보면 대기열·APFS 여유가 네트워크 불안이나 캐시 손상으로 보인다. 아래 세 줄을 Runbook에 박아 두면 Mac 예산 설득이 쉬워진다.
- 단계 불일치로 트리아지 팽창: Ubuntu에서
xcodebuild직전까지 가는 스크립트는 무의미 로그를 늘리고 인증서 조사와 이미지 차이 왕복으로 유료 macOS 슬롯을 헛돌린다. - artifact 계약 부재: Hermes 산출·codegen에 최소 Xcode 버전·슬라이스가 없으면
archive에서야 불일치가 터져 Linux에서 초록이던 신뢰를 깬다. - Mac에서만 큐·디스크 폭주: 단일
mobile태그는 무거운 Android 아카이브가 macOS 슬롯을 가져가고, 브랜치별DERIVED_DATA_PATH없이 병렬하면 APFS 여유가 한 자릿수 GB까지 떨어진다.
다음 표는 Linux에 남길 일과 macOS 필수 일을 가르는 2026년 기준선이다.
2. Flutter/RN 단계 매트릭스
컨테이너로 macOS를 대체하려면 먼저 Linux 한계 FAQ로 불법 지름길을 제거한다.
| 단계 | Flutter 예 | React Native 예 | 권장 OS | 메모 |
|---|---|---|---|---|
| 정적 분석·VM 테스트 | dart analyze, VM만 flutter test | ESLint, 네이티브 없는 Jest | Linux | 고병렬·저비용 |
| Pods/Xcodeproj | 빌드 전 플러그인 등록 | bundle exec pod install | macOS | Xcode 해석 필요 |
| 아카이브/IPA | flutter build ipa | xcodebuild+Fastlane | macOS | 실제 서명 체인 |
| Simulator UI | 통합 테스트 | Detox iOS, XCUITest | macOS | 헤드리스도 Simulator 필요 |
| Android 패키징 | flutter build appbundle | Gradle | Linux/컨테이너 | iOS와 태그 분리 |
linux-mobile과 mac-ios-only로 쪼개고 포괄 mobile은 폐지한다.
3. 일곱 단계 도입
SSH로 닿는 Mac 클라우드 러너가 있다는 전제. 골든 이미지가 없다면 다중 Xcode 글의 헤더 3종부터 고정한다.
- 툴체인 고정: Xcode/Flutter 기대값을 문서화하고 macOS 잡 시작에
xcodebuild -version·flutter --version을 반드시 출력한다. - Linux 가드: 환경변수로
pod install을 건너뛰어 서명 호스트인 척하지 않게 한다. - Mac 입력 최소화: lockfile·중간 번들만 Linux에서 받아 workspace 전체 재업로드를 피한다.
- DerivedData 분리:
DERIVED_DATA_PATH=$CI_WORKSPACE/dd/ios/$CI_COMMIT_SHORT_SHA처럼 브랜치별로 자르고 큐 글과 같은 임계로 정리한다. - Hermes·Xcode 직렬화: 한 노드에서 캐시 디렉터리를 나눠 APFS 경합 스파이크를 줄인다.
- 가벼운/야간 이단: MR은
build-for-testing, 본격archive는 main 야간만. - Runbook 신호: YAML 변경 뒤 macOS 큐 p95·벽시계·여유 공간을 기록하고 노드 핫픽스보다 YAML 롤백을 우선한다.
4. 2026 검토용 수치
중간 규모 모노레포 아카이브는 DerivedData·dSYM 포함 피크 여유 약 90~120GB를 보고 여유율 약 12% 미만이면 신규 archive를 중단한다. macOS 슬롯이 지속 큐 깊이의 4분의 1보다 작으면 대기 p95가 단위 테스트 중앙값의 세 배를 넘기 쉬워 Lint 축소보다 Mac 증설이 먼저다. Bitcode 없이 Pods·Swift 매크로에 따라 아카이브 벽시계는 약 18~35분대가 흔하다. Hermes 켜면 Linux JVM 구간 대비 평균 CPU를 약 1.4~1.8배로 보고 mac-ios-only 병렬을 별도 제한한다. 단일 파이프라인 iOS artifact는 약 2~6GB로 묶고 심볼과 IPA를 쪼개 다운로드 분을 아끼자.
5. FAQ
pod install을 Linux에서?
Podspec 훅이 Xcode 없이도 되는 드문 경우만. 대부분 RN은 macOS가 안전하고 아카이브 직전 실패를 줄인다.
Flutter 데스크톱 Linux 타깃은
범위 밖. 별 러너 풀을 둔다.
다중 Xcode 글과 경계
그 글은 xcode-select·SDK 공존, 본문은 OS 분할·태그 위생. 업그레이드 시 두 Runbook을 함께 갱신한다.
6. 하이브리드에서 Mac 기반 선택
노트북·임시 원격 데스크톱은 단기 릴리스엔 되지만 야간 전원·Xcode 기준선 분산·사내 프록시 재현성 세 가지로 운영 SLO를 깨기 쉽다. Linux는 고밀도 범용, 교체 가능한 macOS 노드는 Apple 전용 슬라이스로 두는 것이 정석이며 네이티브 macOS 없이 iOS 산출물을 억지로 만들면 로그 과금만 쌓인다. 예측 가능한 큐·SSH 운용·디스크 정책을 Linux SLO와 같은 표로 관리하려면 VPSMAC M4 Mac 클라우드 임대가 혼합 개인 기기보다 안정적이기 쉽다. 이미지·DerivedData·가시성은 SSH 이전·다중 Xcode 글과 한 줄로 맞출 수 있다.