싱가포르·일본·한국·홍콩·미동부·미서부의 전용 원격 Mac(M4 / M4 Pro)에서 CI를 돌리면서도 x86_64 전용 정적 라이브러리, 레거시 CLT, 팻/유니버설 산출물에 조용히 의존하는 경우가 많습니다. 이 글은 통증 분해, 의사결정 매트릭스, 6단계 Runbook, 측정 가능한 임계값, 리스 FinOps를 감사 가능한 정책으로 묶고 Flutter/React Native 동시 호스트, DerivedData 위생, CocoaPods/SPM 미러·디스크 글과 연결합니다.
핵심은 아키텍처 제약이 버전 관리에 없다는 점입니다. 전용 호스트는 핀ning에 좋지만 REQUIRES_ROSETTA 없이는 M4도 잘못된 아키 재시도·과도한 clean으로 리스 분을 태웁니다. 셀프호스트 러너 동시성과 동일한 게이트로 두세요.
Rosetta는 무료 호환 계층이 아닙니다. 모바일 이종 스택과 겹치면 CPU는 한가한데 잡이 빨간 현상이 늘어납니다.
리전은 지연·리스 믹스를 고칩니다. 미러가 같은 대륙인데도 빨갛다면 다지역 비용 가이드보다 먼저 ARCHS 표를 확인하세요.
원격 전용 Mac에서의 실무 팁은 링크 단계에서의 아키 불일치 로그를 PR 템플릿에 붙이기입니다. lipo -info 출력 한 블록이 있으면 리뷰어가 “네트워크 문제”와 “의존성 그래프 문제”를 빠르게 구분합니다. 또한 ONLY_ACTIVE_ARCH=YES를 디버그 기본으로 두고 릴리스 아카이브에서만 범용 바이너리를 허용하면 디스크 쓰기 폭주를 상당히 줄일 수 있습니다.
동일 머신에서 Android Gradle과 Xcode를 함께 돌리는 팀은 동시 호스트 FinOps 문서의 메모리·SSD 예산표와 본문의 Rosetta 예산을 합산해야 합니다. 한쪽 표만 보면 “충분한 사양”인데도 피크가 겹쳐 OOM이 나는 이유가 설명됩니다.
| 차원 | 전부 네이티브 arm64(기본) | 혼합 / Rosetta(예외) | 레드라인 |
|---|---|---|---|
| 링크 그래프 | lipo가 arm64만, 숨은 x86 없음 |
x86마다 벤더 일몰 날짜 | 브리징 xcframework 없이 arm64/x86 정적 혼재 |
| 벽시계 | 분산이 낮음 | 높은 분산은 별도 대시보드 | 무코드 연속 빌드에서 >35% 변동 |
| 메모리·동시성 | 통합 메모리 표에 따라 신중 증가 | 기본 동시성 −1, 무거운 시뮬레이터 금지 | swap 지속 증가 |
| 디스크 | 예측 가능한 성장 | 팻 바이너리는 청소 주기 증가 | 루트 여유 <12GB |
| FinOps | 일/주 리스로 대부분 커버 | 짧은 호환 소각 리스로 본 풀 보호 | 본 리스가 Rosetta 피크를 예산 없이 흡수 |
첫 원칙: Rosetta 2는 동적 이진 변환이며 “추가 코어”가 아닙니다. 피크 형태와 재현성을 바꿉니다.
uname -m, lipo -info 고정 블록 출력.ARCHS 집합 동결.REQUIRES_ROSETTA.set -euo pipefail echo "machine: $(uname -m)" find "$WORKSPACE/Pods" -name "*.a" -maxdepth 6 2>/dev/null | head -n 40 | while read -r f; do echo "---- $f" lipo -info "$f" || file "$f" done xcodebuild -scheme "$SCHEME" -configuration Debug ONLY_ACTIVE_ARCH=YES ARCHS=arm64
감사 불가 캐시와 재현 불가 변동을 남깁니다.
아키 정책·동시성·스크립트를 한 통에 두고 Git/아티팩트를 노드 대륙과 맞추려면 MACCOME Mac 클라우드가 실무에 맞습니다. Mac mini M4 / M4 Pro, 일·주·월·분기 리스, 6개 핵심 리전.
ARCHS_POLICY.md + BINARY_INVENTORY.csvMonorepo FinOps와 예산 경계를 명시하세요.
모든 의존성이 xcframework이고 iOS arm64만 빌드하면 Runner/Simulator 글로 이동하세요.