DevOps / 감사 2026년 4월 16일

2026-04-16 iOS CI 디스크 정리: 시뮬레이터 런타임, 아카이브, 임대 클라우드 Mac의 launchd

MacXCode 엔지니어링 팀 2026년 4월 16일 약 14분 읽기

홍콩·도쿄·서울·싱가포르·미국 동부에 임대한 Mac mini M4 빌더는 df -h가 데이터 볼륨 여유를 약 12% 아래로 보일 때까지 디스크가 무한해 보입니다. 그 뒤의 각 xcodebuild test는 추첨과 같습니다. 본문(2026-04-16)은 컴파일 캐시를 격리해도 왜 디스크가 차는지, 큰 디렉터리 지도, 복사해 쓰는 simctl 유지보수, 아카이브 보존 수학, launchd 템플릿을 다루고 잡별 DerivedData 격리(2026-04-15)헤드리스 시뮬레이터 테스트로 연결해 위생 스토리를 끝까지 맞춥니다.

「DerivedData는 이미 치운다」는데 클라우드 Mac 디스크가 찰 때

잡마다 DERIVED_DATA_PATH는 컴파일 경합을 막지만 전역 소비자는 막지 못합니다. Xcode 16.x용으로 설치한 각 iOS 런타임은 여전히 /Library/Developer/CoreSimulator에 있고, UI 테스트는 기기 데이터에 300–900 MB를 더할 수 있으며, 아카이브마다 dSYM과 비트코드 슬라이스가 복제됩니다. 한 호스트에서 개의 Xcode 마이너를 돌리며 오래된 런타임을 제거하지 않으면 팀은 종종 80–140 GB를 잃은 뒤에야 알아챕니다. 디스크 원격 측정과 큐 깊이를 짝지어 janitor가 한계에 닿은 뒤에만 가격으로 확장하세요.

  • 오래 부팅된 시뮬레이터가 CoreSimulator 마운트를 살려 삭제를 막습니다.
  • 오래된 watchOS / tvOS 런타임은 iOS만 빌드해도 남습니다.
  • 아카이브는 공유 SSH 호스트에서 보존 담당이 없으면 쌓입니다.
  • 일부 이미지에서 /tmp로 옮긴 xcresult 묶음은 재부팅 후에도 남습니다—명시적으로 치우세요.

발자국 지도: 기가바이트가 숨는 곳

경로 / 영역 전형적 범위 자동화 안전?
~/Library/Developer/Xcode/Archives 누적 15–120 GB 예—연령 정책 + 객체 스토리지 업로드 선행
~/Library/Developer/CoreSimulator/Devices 8–60 GB 부분—unavailable 삭제 + 미디어 캐시 정리
/Library/Developer/CoreSimulator/Volumes(런타임) 다중 버전 25–90 GB 주의—필요 SDK 매트릭스와 조율
~/Library/Developer/Xcode/iOS DeviceSupport 5–25 GB 정책이 허락하면 180일보다 오래된 버전은 예
알림:/Users/Volumes/builds를 담는 NVMe에서 여유가 50 GB 미만이면 페이지, 25 GB 미만이면 새 잡을 중단해 아카이브 중 커널 쓰기 실패를 피하세요.

운영자가 실제로 실행하는 simctl

CI 큐가 시뮬레이터 활성 0일 때만 실행하거나 유지보수 라벨으로 러너를 먼저 비우세요.

xcrun simctl shutdown all xcrun simctl delete unavailable xcrun simctl erase all # 일회용 프리뷰 호스트만—승인 없이 공유 프로덕션형 빌더에서 금지

xcrun simctl list runtimes를 주간으로 설정 저장소에 넣어 도쿄싱가포르 노드를 맞춥니다.

아카이브: 재무가 이해하는 보존 계산

.xcarchive를 규제 아티팩트처럼 다루고 객체 스토리지에 업로드한 뒤 로컬은 롤백 정책에 따라 14 또는 30일 보존 후 삭제합니다. 법적 요구로 90일 로컬이면 디스크 헤드룸을 명시적으로 구매하세요. 이미 압축된 슬라이스에 zip35%를 넘기기 어렵습니다.

보존 대략 월 증가(단일 앱, 주간 아카이브) 완화
로컬 7일 12–20 GB 야간 tar + 업로드 + 삭제
로컬 30일 45–70 GB 계층 스토리지 + 체크섬 검증
∞ 「혹시 몰라」 무제한 공유 임대 Mac에서는 금지

launchd janitor(클릭 운영 없음)

CI 사용자 소유 비대화 스크립트로 감싸고 ~/Library/Logs/ci-janitor.log에 기록합니다. 한 패스에서 15 GB 초과 삭제 시 비영 종료로 Slack 흔적을 남깁니다. 리전별 일요일 03:00 현지—홍콩 일요 이른 아침은 캘리포니아에선 여전히 토요 저녁이므로 시차를 두세요.

절대 ~/Library/Developer/Xcode/UserData 전체를 삭제하지 마세요—스니펫과 중단점이 있고 엔지니어가 반발하며 미스터리 빨간 빌드 티켓이 돌아옵니다.

DerivedData 및 테스트 전략과 짝짓기

전역 정리 후에도 각 파이프라인은 2026-04-15 격리 글처럼 잡마다 DERIVED_DATA_PATH를 설정하세요. UI 무거운 스위트는 헤드리스 시뮬레이터 테스트로 병렬 destination을 제한해 janitor가 활성 SimulatorTrampoline과 싸우지 않게 합니다.

공격적 정리 후 관찰점

첫 정리 후 잡은 심볼 재다운로드나 DeviceSupport 재구축으로 +4~+11분 더 걸릴 수 있습니다. p95 빌드 시간을 48시간 추적하고 22% 이상 튀면 정책이 과격합니다—백업에서 복구하거나 보존을 넓히세요.

FAQ: 임대 Apple Silicon의 디스크 위생

질문 짧은 답
Archives를 NFS로 심볼릭 링크? 저지연 링크일 때만; 아니면 업로드 후 로컬 삭제.
Apple Silicon이 CoreSimulator 데이터를 압축? APFS 클론이 일부 템플릿에 도움—회계에 의존하지 마세요.
janitor 스크립트 소유자는? 플랫폼 팀 + on-call 로테이션을 도움말에 문서화.

리전, NVMe, Mac을 하나 더 둘 때

디스크 압박은 종종 한 호스트에 워크로드가 과다한 프록시입니다. janitor가 주간 >40 GB를 회수해도 여유가 20% 근처면 JPSG 빌더로 팀을 나누거나 둘째 미국 동부 노드를 추가하세요—Git과 ASC 지연도 바이트만큼 중요합니다. 가격으로 베어 메탈 티어를 비교하고 블로그 색인으로 서명·공증·OpenClaw 런북을 북마크하세요.

한 줄: 공유 임대 Mac에서 전역 시뮬레이터 + 아카이브 위생은 선택이 아니라 야간 빌드가 예측 가능한지「누군가 SSH 할 때까지 빨강」인지를 가릅니다. 자동화하고 측정하고 잡별 DerivedData 규율과 짝을 이루세요.

여유 있는 M4 빌더 임대

HK · JP · KR · SG · US · SSH / VNC