2026: параллельная лаборатория XCTest на удалённых Mac
пять регионов · симуляторы M4/M4 Pro · DerivedData · аренда FAQ
Стройте параллельную XCTest-лабораторию на удалённом Mac: сначала согласуйте задержки пяти регионов и маршрутизацию runner, ограничьте параллелизм симуляторов на M4 / M4 Pro, защитите диск изоляцией DerivedData, затем зафиксируйте бюджет по матрице краткосрочной и месячной аренды.
запад и восток США
параллельных UI-тестов
на каждый CI job
1Пять регионов: задержки и маршрутизация XCTest
Удалённая лаборатория XCTest в 2026 году — это не «один Mac в облаке», а сеть узлов с предсказуемой маршрутизацией. Команды из Китая, Юго-Восточной Азии и Северной Америки по-разному ощущают задержку: инженеру важны миллисекунды до SSH и VNC, а пайплайну — стабильная полоса для .xcresult и скриншотов. Поэтому сначала измеряйте RTT и jitter из ваших офисов и CI-агентов, а уже потом закрепляйте регион в SLA провайдера.
Узкое место чаще в стриминге логов и выгрузке артефактов, а не только в компиляции. Ориентировочный RTT из офисов материкового Китая (проверьте mtr):
| Узел | RTT (ориентир) | Лучше для XCTest | Заметки |
|---|---|---|---|
| Гонконг | 30–45 мс | Интерактивная отладка, smoke | Базовый APAC выбор |
| Сингапур | 55–75 мс | Матрица SEA, TestFlight | Стабильный магистральный канал |
| Токио | 60–90 мс | UI для Японии, релей по TZ | Дополняет HK/SG |
| Запад США | 140–170 мс | Ночные полные сьюты, colo AWS us-west | Высокая полоса для артефактов |
| Восток США | 170–200 мс | Приватный CI GCP/AWS East | Быстрее обновление железа выбор |
Маркируйте runner как region-hk-ui и закрепляйте в договоре регион + уровень параллелизма; отчёты передавайте между регионами, но не синхронизируйте целые деревья DerivedData.
Подробнее: релей CI runner между APAC и востоком США
Разделите workflow на «интерактив» и «ночной шард»: днём держите smoke и отладку в APAC, тяжёлые UI-сьюты и выгрузку артефактов — на западе или востоке США рядом с вашим облаком. Так вы не платите за лишние гигабайты через Тихий океан в обе стороны и не заставляете разработчиков ждать ночной прогон с RTT 180 мс.
2M4 / M4 Pro: матрица параллелизма симуляторов
Ограничивайте по объёму RAM; UI- и unit-полосы считайте отдельно:
| RAM | M4 (10 ядер) | M4 Pro (12 ядер) |
|---|---|---|
| 16 ГБ | 1 UI-полоса; до 3 unit-симуляторов | Чуть больше запаса; двойной UI избегайте |
| 24 ГБ | 2 UI; 4 unit | 3 UI (с изоляцией сборки)выбор |
| 32 ГБ+ | 3 UI (следите за сжатием памяти) | Высокий параллелизм / несколько Xcode |
Если SpringBoard перезапускается или свободно на APFS меньше 45 ГБ — сразу снижайте параллелизм.
Для планировщика CI: одна UI-полоса ≈ 6–8 ГБ RAM и 8–12 ГБ временного диска на полный UI-сьют. Unit-полосы легче, но I/O всплескивает при пересборке модулей. Зафиксируйте потолки в README runner, чтобы дежурные не «лечили» флейки удвоением concurrency ночью.
На M4 Pro имеет смысл выделять отдельные тома под кэш симулятора и под DerivedData: так параллельные UI-полосы реже блокируют друг друга при записи на APFS. Если в матрице Xcode одновременно крутятся iOS 17 и 18, заложите +1 UI-полосу запаса по RAM или снизьте unit-параллелизм на один слот — смешанные runtime заметно тяжелее «чистого» iOS 18.
3Управление DerivedData и масштаб 1 ТБ / 2 ТБ
DerivedData — главный «тихий убийца» параллельных лабораторий: несколько job пишут в один каталог, индексы Xcode путаются, а очистка по cron сносит чужой кэш посреди прогона. Политика «один job — один путь» должна быть в скрипте bootstrap runner, а не в устной договорённости.
Не делите каталог DerivedData по умолчанию между job. Задавайте DERIVED_DATA_PATH=/var/ci/dd-${JOB_ID} на каждый job; при <15% свободного места тесты замедляются раньше, чем падают. 1 ТБ и еженедельная очистка хватает большинству команд; 2 ТБ — при многих ветках и версиях Xcode параллельно. Перед расширением диска делайте снимок.
См. также: удалённый Mac, OpenClaw, диски и шлюз FAQ
4Матрица краткосрочной и месячной аренды
| Сигнал | Краткосрочно | Месячно |
|---|---|---|
| Загрузка очереди | >70% в релизные недели, <30% в остальное | Очереди весь день норма |
| Окно параллелизма | Всплеск 2–4 доп. симулятора | Фиксированный M4 Pro + пул 2 ТБ |
| Логика затрат | Оплата за окно; удобно под пики | Ниже амортизация; нужен прогноз утилизации |
Сравнивайте простой с надбавкой за краткосрочный пик — не только суточный прайс.
Гибрид «месячный костяк + краткосрочный всплеск» часто выигрывает у чисто помесячного контракта: две-три M4 Pro в резерве на месяц и дополнительные M4 на неделю релиза покрывают декабрьский пик без оплаты за простой в феврале. Зафиксируйте в договоре, можно ли переносить неиспользованные краткосрочные дни на следующий квартал — это снижает риск для финансов.
5FAQ
6Запускайте лабораторию на Mac mini
Параллельному XCTest нужен нативный стек симуляторов macOS и стабильность без присмотра. Apple Silicon даёт пропускную способность памяти, которую Intel-хосты редко догоняют; Gatekeeper и SIP сужают риск на runner. Mac mini M4 и M4 Pro в простое ≈4 Вт и тихи — удобно для лабораторий 24/7. Начните с Mac mini M4 и отдайте параллельным тестам эту полосу памяти — см. CTA ниже.