За 30 секунд
- Причина: macOS beta теперь часть слоя выполнения CI — не побочный тестовый образ.
- Симптом: один commit локально зелёный, в CI красный, retry зелёный — не чините как flaky test.
- Решение: продакшен CI на стабильном macOS; beta только на выделенном Mac mini, возврат PASS/FAIL.
1. Что изменилось
После WWDC 2026 macOS 27 beta и Xcode 18 beta идут парой. Чтобы тестировать новый SDK, CI-хост должен встать на beta-рельсы — пайплайн больше не выглядит как:
code → build → test → artifact
а скорее так:
code + Xcode beta + macOS beta + Simulator + Keychain → build
Редко виноват diff. beta стал runtime — и beta меняется каждую неделю.
2. Четыре режима сбоя (после WWDC)
| Механизм | Что видите |
|---|---|
| Xcode привязан к macOS beta | Runner не может зафиксировать версии; локальный stable vs CI beta не совпадают |
| Джиттер Simulator | Холодный старт +30–80 %, UI-тесты по таймауту, плавает планирование ядра |
| Дрейф подписи / Keychain | Прерывистые сбои codesign, retry проходит — см. гайд по подписи |
| Более строгий Swift toolchain | Инкрементальные сборки пропускают файлы; нужен clean build |
3. Знакомые симптомы
- Дрейф времени: один commit,
xcodebuildс 18 до 37 минут - Дрейф результата: локально зелёный → CI красный → retry зелёный (шум среды, не flakiness тестов)
- Ложная уверенность: CPU простаивает, stack trace нет, тесты падают случайно
Это не то же самое, что почему CI в 2–3 раза медленнее локальной: там кеш. Здесь неопределённость на уровне ОС — YAML не спасёт.
4. Решение: изоляция выполнения beta
Не ставьте beta на продакшен CI. Гоняйте на одноразовом Mac mini и стримьте результаты.
Стабильный CI (release macOS + Xcode)
↓
Удалённый Mac mini (только beta)
↓
Вернуть PASS / FAIL + IPA
Четыре шага:
- Выделить beta-only Mac mini (отдельный пользователь + Keychain)
- Зафиксировать основные runner на стабильном macOS для merge и release
- Установить beta-стек на изолированный узел; триггер через метки
[beta, ios]или ночной SSH - Возвращать только результаты — не монтировать beta-кеши на продакшен runner
Метки runner: гайд self-hosted Mac mini; beta-матрица для release-sprint: временная матрица сборки.
5. Какой вариант выбрать
| Подход | Стабильность | Вердикт |
|---|---|---|
| beta на рабочем Mac | ❌ загрязнение Keychain, сложный откат | ❌ |
| GitHub-hosted runner | ⚠️ очередь + отстающие beta-образы | ⚠️ только дополнение |
| VM / снимки | ❌ нестабильный GPU Simulator | ❌ |
| Удалённый Mac mini beta-узел | ✅ изолирован, одноразовый | ✅ |
6. FAQ
Влияет ли macOS beta на CI?
Да — симуляторы, дефолты toolchain и подпись дрейфуют. Один commit — разные исходы.
Можно ли гонять beta CI на рабочем Mac?
Для личных экспериментов — да; на общих и продакшен-сборочных машинах избегайте.
Хватит ли GitHub Actions?
Помогает с очередями, но не убирает недетерминизм beta.
Лучшая практика?
Выделенный beta Mac mini + замороженный основной CI. После WWDC суть — неконтролируемая среда, а не «build failed».
Проверить изоляцию за 48 часов
Заморозить основные runner → ночной beta-узел на том же commit → сравнить PASS. Стабильная основная линия + дрожащий beta = разделение работает. Чеклист онбординга · Тарифы