Акция

После WWDC 2026 CI рушится: macOS beta и стабильность iOS-сборок (изоляция)

CI iOS-сборка · WWDC 2026
2026-06-09 ~5 мин

Медленные сборки, прерывистые сбои подписи, retry зелёный — обычно не код. macOS beta в CI. Решение: заморозить основной CI, beta на выделенном Mac mini.

За 30 секунд

  1. Причина: macOS beta теперь часть слоя выполнения CI — не побочный тестовый образ.
  2. Симптом: один commit локально зелёный, в CI красный, retry зелёный — не чините как flaky test.
  3. Решение: продакшен CI на стабильном macOS; beta только на выделенном Mac mini, возврат PASS/FAIL.
Влияние macOS beta на стабильность iOS CI после WWDC 2026

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 betaRunner не может зафиксировать версии; локальный 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

Четыре шага:

  1. Выделить beta-only Mac mini (отдельный пользователь + Keychain)
  2. Зафиксировать основные runner на стабильном macOS для merge и release
  3. Установить beta-стек на изолированный узел; триггер через метки [beta, ios] или ночной SSH
  4. Возвращать только результаты — не монтировать 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 = разделение работает. Чеклист онбординга · Тарифы