Не ждите вывода macOS-14 из эксплуатации: на этой неделе выберите подходящую замену, проверьте на ней полный выпускной workflow в изоляции и только после этого переводите рабочие публикации партиями. GitHub подтвердил, что метки macOS-14, macOS-14-large и macOS-14-xlarge будут выведены из эксплуатации 2 ноября 2026 года; совместимость замены зависит от проекта, а не от названия Runner (официальное объявление GitHub).

Инструкция предназначена для IT- и платформенных руководителей, отвечающих за iOS-публикации и условия допуска в production.
Она также пригодится инженерам, которым нужно подтвердить сборку, архивирование и подпись в новой среде.
Техническим руководителям, планирующим резервные ресурсы Mac, поможет определить, какие рабочие нагрузки нуждаются в отдельном варианте размещения.

Последнее обновление: 26 октября 2026 года. Сведения сверены с официальным объявлением GitHub, документацией по выбору Runner и репозиторием образов Runner. Перед переключением повторно проверьте доступность меток и содержимое образов в репозитории Runner Images.

01

До отключения: зафиксируйте базовый процесс iOS CI

Миграция GitHub Actions macOS-14 для iOS CI — не замена одной строки с меткой Runner. Сначала зафиксируйте, что именно должен повторить новый узел: выбор Xcode, разрешение зависимостей, сборку, тесты, создание архива и подписание. Иначе зелёный статус задания может подтвердить лишь частичную проверку, а не готовность выпускать приложение.

Начните с настоящего release workflow, который уже проходит принятую командой процедуру выпуска. Сохраните его YAML, выбранную метку Runner и журналы фактического запуска. Отдельно отметьте, как workflow выбирает Xcode: задан ли путь явно, используется ли системный выбор или настройка меняется в ходе задания. Метка macOS не доказывает, какая версия Xcode доступна или фактически использовалась.

Соберите исходную точку по каждому критичному шагу:

  • исходный код и идентификатор коммита;
  • результат установки и разрешения зависимостей;
  • команды сборки и тестирования, конфигурации и схемы;
  • сведения о созданном архиве и выполненных проверках;
  • способ получения сертификата и профиля, а также этапы подписи;
  • шаги выгрузки и ограничения доступа к публикационным секретам;
  • сообщения об ошибках и предупреждения, которые команда считает допустимыми.

Сравнивайте не только итоговый статус задания. Сверьте фактический Runner, вызванный Xcode, успешность тестов, созданный архив и результат проверки подписи. Если release workflow передаёт сборку дальше по цепочке, отдельно определите, какой этап должен завершиться до передачи артефакта, а какой — до публикации.

Какие workflow менять первыми? Сначала выделите задания, где непосредственно указаны уходящие метки, и те, что зависят от них косвенно — например, через повторно используемый workflow или общую матрицу сборки. Не переводите все задания только потому, что строка runs-on совпала с названием метки. Разделите обычную компиляцию, тестирование симулятора и публикационный процесс с подписью. У этих задач разные последствия сбоя и разные требования к доступу.

Здесь рассматривается перенос действующих выпускных процессов. Полный аудит всех репозиториев организации и аварийное восстановление после Brownout — отдельные задачи. Если нужно оценить остальные ссылки на macOS-14, ведите такой аудит независимо: миграционный пилот должен ответить на конкретный вопрос, готов ли выпуск приложения к новой среде.

02

При выборе Runner: сопоставьте ограничения проекта, а не только метки

Выбирайте кандидатов после проверки системных требований проекта. Версия macOS, архитектура Runner и установленный Xcode — связанные, но не взаимозаменяемые характеристики. Сначала сверьте правила выбора в документации GitHub по Runner, а затем изучите актуальные данные официальных образов. Требования к сочетанию macOS и Xcode проверяйте по документации Apple о системных требованиях Xcode.

В числе кандидатов могут рассматриваться macOS-15 или macOS-26, если нужные метки доступны для конкретной задачи и отвечают требованиям проекта на момент проверки. Ни одна из них не является безусловно совместимой заменой. Даже при подходящей версии macOS состав инструментов может различаться. Это выясняют по официальным сведениям об образе и журналу фактического запуска, а не по догадке, основанной на имени метки.

Как проверить сборку Xcode при переходе на macOS-15 или macOS-26? Запустите тот же проект и ту же команду сборки на выбранном кандидате. В журнале подтвердите фактическую систему и архитектуру, выбранную версию или путь Xcode, доступность нужных SDK и результат разрешения зависимостей. Если Xcode выбирается неявно, задайте его явно либо зафиксируйте процедуру выбора и проверяйте её при каждом запуске. Требования Apple к системе и Xcode могут исключить некоторые сочетания ещё до пробной сборки.

Решите, какие задания допустимо объединять, а какие лучше разделить. Для обычной компиляции, симуляторных тестов и создания архива для публикации могут подходить разные Runner или настройки. Но такое решение должно опираться на воспроизводимую проверку, а не на успешный результат одного тестового задания.

Не переносите публикационные секреты в экспериментальный workflow по умолчанию. Пока новый путь не прошёл проверку, выдавайте ему только те права, которые нужны для сборки без производственной публикации. Условия доступа и защиты окружений сопоставьте с документацией GitHub по deployment environments и рекомендациями по безопасному использованию GitHub Actions.

03

На изолированном этапе: пройдите полный release workflow без production-секретов

Проверочный запуск должен быть достаточно близок к выпуску, чтобы выявить несовместимость, и достаточно изолирован, чтобы не допустить случайной публикации. Используйте непроизводственную ветку или отдельный workflow. Не подключайте production-секреты и разрешения только ради того, чтобы экспериментальный запуск прошёл весь публикационный путь.

Проводите проверку последовательно:

  • Скопируйте текущую логику release workflow в изолированный вариант и замените только метку Runner или настройки среды, которые необходимо проверить.
  • Запустите разрешение зависимостей и сравните журнал с базовым запуском. Зафиксируйте изменения источников, предупреждений и ошибок.
  • Выполните сборку проекта с теми же схемой, конфигурацией и параметрами, что используются при выпуске.
  • Запустите предусмотренные проектом тесты, в том числе зависящие от симулятора или системных инструментов.
  • Создайте архив и проверьте его структуру и ожидаемые атрибуты.
  • Выполните проверку подписи в безопасном тестовом контуре. Сверьте сертификат, профиль и результат проверки; не допускайте утечки секретов в логи.
  • Проверьте загрузку или следующий этап цепочки, только если для него предусмотрен безопасный непроизводственный режим.

Используйте одинаковый исходный коммит и одинаковые входные параметры. Отмечайте различия, даже если workflow завершился успешно: смена Xcode, SDK, зависимостей или доступных инструментов может повлиять на последующие сборки. Для архивирования и подписи сверяйте ожидаемое поведение с документацией Apple о создании подписанного дистрибутива. Если архив нельзя проверить тем же способом или его подпись отличается от принятой, не допускайте публикационную задачу к production.

Что считать достаточной проверкой архива, подписи и загрузки? Заранее определите результаты, которые можно проверить повторно: журнал запуска, выбранную среду, результат сборки и тестов, созданный архив и результат проверки подписи. Если загрузка входит в выпускной маршрут, отдельно подтвердите прохождение этого шага через безопасный тестовый контур. Сравнение только по коду возврата недостаточно: оно не показывает, совпали ли ожидаемые выходные файлы и подпись.

Следите за повторными запусками. Если несколько попыток одного выпуска могут выполняться одновременно, настройте для workflow правила очереди и взаимного исключения. Это помогает не допустить, чтобы параллельные задания перезаписали состояние или создали неоднозначность при публикации. Для production-процесса заранее определите, какой запуск считается актуальным и кто вправе продолжить выпуск после неудачной попытки.

04

Перед production: допускайте workflow партиями и заранее задайте откат

Переводите рабочие публикации только после того, как изолированный процесс подтвердил все критичные этапы. Начните с задачи, для которой известны ограничения, есть проверенный результат и подготовлен способ возврата. После переключения проверьте, что фактический Runner соответствует выбранной метке, а журнал подтверждает ожидаемую среду и инструментальную цепочку.

До включения следующей группы заданий определите условия остановки. Например, если не проходит создание архива, меняется результат подписи, отсутствует нужный SDK или публикационный шаг получил непредусмотренные разрешения, дальнейшее расширение миграции прекращается. Сбой одного задания не должен автоматически приводить к переключению оставшихся workflow на тот же вариант.

Откат — это возврат к уже проверенному и доступному пути, а не безусловное восстановление старой метки. После её вывода из эксплуатации зависимость от неё не является планом восстановления. Поэтому до production-перехода зафиксируйте замену для конкретной задачи и подтвердите её повторным запуском. Если процесс отката по-прежнему указывает на уходящий Runner, он лишь откладывает решение.

Как действовать, если новая среда не проходит проверку? Остановите расширение переключения и сохраните журнал с точкой отказа. Установите, связано ли отличие с системой, архитектурой, инструментами, Xcode, зависимостями или подписью. Затем либо исправьте конфигурацию и повторите изолированную приёмку, либо направьте критичный выпуск на отдельно проверенный Mac-контур. Не меняйте одновременно Runner, настройки подписи и зависимости: при нескольких одновременных изменениях сложнее установить причину результата.

Для каждого этапа назначьте ответственного за разрешение перехода и место хранения доказательств приёмки. Убедитесь, что production-секреты доступны только защищённому окружению и нужным заданиям. Контролируйте отмену и параллельный запуск публикаций: особенно важно не допустить пересечения, когда часть workflow уже перенесена, а часть ещё работает в прежнем контуре.

05

Для задач без подходящей замены: проверьте резервный Mac отдельно

Если выпускная задача не проходит приёмку на доступных hosted Runner, сначала опишите её ограничения. Уточните обязательные систему и инструменты, требования к сертификатам и профилям, доступ к внутренним зависимостям и сети, режим запуска, изоляцию и процедуру восстановления. Не делайте вывод о необходимости Mac по одной ошибке: выясните, нельзя ли устранить её настройкой workflow или закреплением выбора Xcode.

Резервный Mac не является автоматическим решением проблемы совместимости. Его тоже нужно принять по реальному процессу: проверить доступ, установить требуемые инструменты, выполнить сборку, тесты, архивирование и безопасную проверку подписи. Отдельно согласуйте управление секретами и возможность восстановить узел или перенаправить на него задачу. В противном случае команда просто переносит неопределённость с hosted Runner на другой компьютер.

При выборе размещения сопоставьте потребность в контроле, постоянном доступе, обслуживании и сроке использования. Собственный Mac может быть разумнее для постоянной предсказуемой нагрузки или требований к физическим интерфейсам. Удалённый Mac стоит оценивать для временной ёмкости, миграционного пилота или отдельного резервного контура — после подтверждения подходящей конфигурации, срока аренды, размещения и условий доступа на актуальных страницах. Не закладывайте бюджет по неподтверждённым характеристикам.

В руководстве MESHLAUNCH по удалённому Mac можно проверить, подходит ли такой формат для отдельного CI-узла. Страница заказа Mac mini поможет сверить актуальные условия конкретного предложения. До решения подтвердите, что выбранный вариант покрывает требования задачи; не переносите параметры с другой конфигурации или региона.

Вариант Когда рассматривать Что подтвердить перед допуском
Поддерживаемый hosted Runner Проект совместим с доступной системой, архитектурой и набором инструментов Реальный запуск, Xcode, зависимости, тесты, архив и подпись
Собственный Mac Нужны постоянный контроль или условия, которые не покрывает hosted-среда Обслуживание, доступ, безопасность секретов, резервирование и восстановление
Удалённый Mac Нужна отдельная временная ёмкость или резервный контур Доступность подходящей среды, сеть, права, проверка сборки и условия предоставления
Изменение workflow Несовместимость вызвана не платформой, а неявным выбором инструментов или конфигурацией Воспроизводимость после исправления и повторная полная приёмка
06

Перед завершением миграции: пройдите проверку допуска

Используйте список как критерий допуска в production. Если критичный пункт не подтверждён, оставьте соответствующий release workflow в проверочном контуре и не расширяйте переключение.

  • [ ] Зафиксированы исходная метка, фактическая система, архитектура и выбор Xcode в базовом запуске.
  • [ ] Определены выпускные задания, прямо или косвенно использующие уходящие метки.
  • [ ] Для каждого критичного задания выбран кандидат с учётом требований проекта, а не только доступности метки.
  • [ ] Изолированный workflow прошёл разрешение зависимостей, сборку и необходимые тесты на целевом Runner.
  • [ ] Архив создан и проверен; результат подписи сопоставлен с принятой процедурой.
  • [ ] Публикационные секреты и разрешения не выдавались экспериментальному запуску без необходимости.
  • [ ] Для production-перехода назначены ответственный, критерий остановки и проверенный путь отката.
  • [ ] План отката не зависит от метки, выводимой из эксплуатации.
  • [ ] Если выбран резервный Mac, на нём выполнен реальный процесс, соответствующий критичной публикационной задаче.
  • [ ] Журналы и результаты приёмки доступны команде для последующей диагностики и повторной проверки.

Переход на новую метку не завершает миграцию, пока команда не сверила фактическое окружение после запуска. В день производственного переключения проверьте выбранный Runner, Xcode и результат release workflow, затем сохраните доказательства приёмки. Если официальный список меток или образы изменились, повторно сверьте состояние с объявлением GitHub и официальными данными Runner Images, прежде чем считать прежнюю проверку актуальной.

Если hosted-среда после проверки покрывает все критичные задачи, отдельный Mac-контур может быть лишним. Если часть выпусков остаётся привязана к требованиям, которые не удаётся удовлетворить на выбранном Runner, сравните сопровождение собственного узла с удалённым Mac по условиям доступа, эксплуатации и проверяемому результату. У каждого варианта есть издержки: собственное оборудование требует обслуживания и планирования ёмкости; удалённая среда — проверки сети, прав и восстановления; сохранение зависимости от macOS-14 не решает задачу после вывода этой среды из эксплуатации.

Для временной дополнительной ёмкости или проверенного резерва можно рассмотреть аренду Mac у MESHLAUNCH — после тестового запуска реальной публикационной задачи и сверки актуальных условий. Сначала подтвердите, что среда позволяет выполнить нужные сборку, архивирование и проверку подписи. Затем решайте, стоит ли выделять её под резервный выпускной контур.