Руководители платформы и mobile, переносящие iOS/macOS-сборки на удалённые Mac в 2026, часто начинают с формулы «сначала зарегистрируем runner'ы, политику потом». Это даёт размытые метки, параллелизм, насыщающий дисковый I/O, и переплетённые контексты подписи. Гайд ориентирован на команды, выбирающие узлы в Сингапуре, Токио, Сеуле, Гонконге, восточном и западном побережье США: разложение болевых точек, две таблицы control plane, фрагменты workflow для вставки, шестишаговый runbook и три метрики наблюдаемости, со ссылками на посты про ёмкость для нескольких проектов и SSH vs VNC для ревью CI и оформления доступа.
Собственные runner'ы отдают оркестратору реальную среду исполнения macOS. В GitHub Actions это runner'ы уровня репозитория и организации; в GitLab — runner'ы проекта и группы с разными типами executor. Если метки остаются общими (mac, ios), workflow конкурируют за один хост; накапливаются DerivedData и горячие точки дискового I/O, а сбои выглядят как случайные таймауты вместо явного давления на ресурсы. Разложите шесть классов проблем ниже, прежде чем добавлять хосты или переходить на M4 Pro.
clean бьёт по параллельным проектам..xcarchive или кэшей зависимостей.Далее таблицы задают роли runner'ов и различия GitHub/GitLab; затем сопоставим YAML и шаги внедрения.
Граница ответственности: статья про мультипроект — про очереди и смеси аренды; эта — про регистрацию Mac и предсказуемое попадание workflow в нужную среду. Таблицу 1 используйте на архитектурном ревью.
| Измерение | Общий пул runner'ов | Выделенный сборочный хост |
|---|---|---|
| Типовые задания | Линтеры, юнит-тесты, лёгкий xcodebuild, без продакшен-подписи | Архивы, загрузки в TestFlight, матрицы симуляторов, строгая подпись |
| Метки | Детализированные: macos-14, xcode-16, no-signing, композиция | Теги под проект; блокируйте чужие репозитории от runs-on |
| Параллелизм | Консервативный параллелизм + переполнение очереди на пиковые хосты | Привязка к телеметрии диска; стабильность важнее полного насыщения I/O |
| Секреты и учётные записи | Отдельный пользователь CI, сегментированная связка ключей или стратегия профилей | Фиксированная идентичность подписи, владелец ротации, след аудита |
| Предпочтительно когда | Низкая связность, допустимы короткие очереди | Комплаенс, поставка заказчику или релизные ворота с воспроизводимым хостом |
Оба варианта могут управлять удалёнными Mac, но различаются инъекцией секретов, видимостью runner'ов и привычками кэширования. Таблица 2 выравнивает терминологию платформы и инженерии (имена полей сверяйте с актуальной документацией вендора).
| Измерение | GitHub Actions (self-hosted) | GitLab Runner (shell/ssh) |
|---|---|---|
| Планирование | Runner'ы репо/орг + runs-on: [self-hosted, …] | Совпадение tags + область регистрации (проект/группа/instance) |
| Секреты | Secrets/Variables, Environments; OIDC для краткоживущих облачных учётных данных | Переменные CI/CD, masked vars; следите за наследованием группы и защищёнными ветками |
| Рычаги параллелизма | Матричные задания требуют ограничений процессов на стороне runner | concurrent и конфигурация на runner; избегайте нескольких executor на одном пользователе без изоляции |
| Типовые ловушки | Собственные runner'ы могут унаследовать переменные интерактивного сеанса | Несколько процессов runner конкурируют за лицензии Xcode или порты |
# GitHub Actions: привязывайте задания к возможностям, а не к «просто macOS»
jobs:
ios_build:
runs-on: [self-hosted, macOS, xcode-16, m4-ci]
concurrency:
group: ios-${{ github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_16.app
# GitLab CI: теги сопоставляются с runner'ом на удалённом Mac
ios_build:
tags: [macos, xcode16, m4-ci]
script:
- xcodebuild -version
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
Примечание: занесите имена меток во внутренний runbook вместе с путём Xcode, политикой подписи и максимумом параллельных заданий — не копируйте устаревшие workflow без сверки.
Региональные предпосылки — в мультирегиональном гайде; выбор доступа — в SSH vs VNC.
Имена полей можно переносить в Grafana, Datadog или еженедельные отчёты.
После двух стабильных недель на выделенном хосте рассмотрите второй узел или M4 Pro для тяжёлых матриц.
Эксплуатационное дополнение: когда xcodebuild и разрешение пакетов Swift одновременно нагружают сеть и диск, P95 часто растягивают индексация и запись кэша — не только пропускная способность компилятора. Отслеживайте длину очереди вместе с ожиданием диска (await), а не только CPU. Свяжите часы онлайн runner'ов со счетами аренды, чтобы финансы видели, зачем хост остаётся выделенным; иначе споры об общем пуле повторяются без доказательств.
Вложенная виртуализация усиливает трение для Metal, подписи и USB; личные ноутбуки засыпают и обновляются по графику, ломающему ненаблюдаемые задания. Промышленный Apple Silicon требует выделенного bare metal, выбираемых регионов и композиции сроков аренды с метками runner'ов и параллелизмом, закреплёнными в операционной базовой линии.
Разрозненные десктопы редко держат долгоживущие шлюзы, слои агентов ИИ или мультирепозиторный CI: запросы прав и внезапные обновления ОС превращают автоматизацию в случайные сбои. MACCOME предоставляет мультирегиональные узлы Mac Mini M4 / M4 Pro на bare metal с гибкими условиями — как базовый слой исполнения для собственных runner'ов плюс приёмочно проверенная пиковая ёмкость. После постов про регион, SSH/VNC и мультипроект согласуйте пакеты на странице тарифов и закажите совпадающий регион.
Пилотируйте на короткой аренде в основном регионе артефактов, прежде чем растягивать базу с месяца на квартал; очень короткие пики закрывайте посуточной или понедельной арендой вместо фиксации средств в неверном тире.
FAQ
Сначала runner'ы или метки и параллелизм?
Сначала зафиксируйте семантику меток и параллелизм на runner, затем смотрите на очереди и дисковый I/O. Откройте тарифы аренды Mac mini и сочетайте с мультирегиональным выбором.
Единая точка выравнивания для секретов GitHub и GitLab?
Долгоживущие секреты не храните в git; изолируйте подпись отдельными пользователями macOS. Для моделей доступа читайте SSH vs VNC для CI и центр помощи.
Что ещё читать про параллельные проекты?
Продолжите с ёмкостью для нескольких проектов и смесями аренды, чтобы согласовать роли runner'ов с вехами.