Intel-узел не может принять macOS 27, а очередь сборки уже требует новый контур.
Решение: не меняйте все CI-узлы разом. Для заданий, которым необходима macOS 27, подготовьте исполнительную среду на Apple Silicon; Intel оставьте для подтверждённых старых систем и инструментов. На этой неделе составьте матрицу заданий и проверьте её на реальных сборках, прежде чем покупать или арендовать оборудование.
Этот разбор для разработчиков, сопровождающих сборки macOS-приложений и проверяющих совместимость существующих Intel-узлов.
Он также пригодится DevOps- и платформенным инженерам, которым нужно разделить маршрутизацию заданий и обязанности по обслуживанию.
Руководителям разработки, выбирающим между новым узлом, удалённой арендой и параллельными контурами, он поможет сравнить варианты без выдуманных цен и характеристик.
Последняя проверка: 16 октября 2026 года. Системные требования сверены с объявлением Apple о macOS 27 и Rosetta, перечнем совместимых моделей и таблицей требований Xcode; состояние выпусков проверено по записям Apple Developer.
Квалификация системы против совместимости приложения
Сначала разделите две проверки, которые часто ошибочно сводят к одной: способен ли компьютер установить целевую macOS и сможет ли приложение или его зависимости работать на определённой архитектуре.
Apple указывает, что macOS 27 предназначена только для Mac на Apple Silicon. Компания также обозначила macOS 26 как последнюю версию macOS с поддержкой Intel Mac и Rosetta. Эти границы относятся к хостовой системе, а не к формату собранного приложения: наличие универсального бинарного файла не позволяет Intel-узлу установить macOS 27.
Универсальный бинарный файл может содержать код для разных архитектур, однако это не делает одинаковыми среды сборки, исполнения и тестирования. Документация Apple описывает создание универсального бинарного файла для macOS, а также архитектурные различия, которые следует учитывать в коде. Для CI это означает, что проверять надо весь путь: от запуска инструментов на узле до поведения результата на целевой архитектуре.
Оставшийся Intel Mac может продолжать выполнять задания, если для них подходит установленная хостовая macOS, доступная версия Xcode и используемые зависимости. Но ответ на вопрос «может ли этот узел собрать приложение?» не доказывает, что он годится для проверки под macOS 27. В задаче могут быть отдельные требования к системе, симулятору, подписи или упаковке. Если хотя бы одна обязательная операция должна исполняться на macOS 27, Intel-контур её не заменит.
Практически полезно вести две отметки в матрице совместимости:
- Квалификация узла: поддерживает ли конкретный Mac целевую хостовую систему?
- Квалификация задания: проходит ли полный рабочий процесс на этом узле и соответствует ли результат требованиям выпуска?
Так вы не перенесёте на новую архитектуру все задачи лишь потому, что приложение компилируется, и не оставите старый узел в роли единственного исполнителя задачи, требующей новой системы.
Xcode, хостовая macOS и SDK как отдельные ограничения
Совместимость Xcode проверяйте не по названию будущего или установленного релиза, а по связке «версия Xcode — хостовая macOS — нужные SDK — целевая платформа». В официальной таблице требований Xcode Apple указывает, какие версии хостовой macOS необходимы для конкретного выпуска.
Это важно, потому что слова «обновить CI под macOS 27» могут скрывать несколько разных задач. Одной команде нужно лишь собирать приложение актуальным SDK. Другой — запускать тесты с конкретной версией Simulator. Третьей — поддерживать выпуск, для которого требуется проверка на прежней системе. Требование к deployment target, то есть к минимальной версии macOS, не означает, что хост сборки должен работать именно на этой версии. И наоборот: наличие нужного SDK не подтверждает, что вся нужная связка Xcode и хостовой macOS официально совместима.
Соберите доказательства на уровне рабочих процессов. Для каждого задания зафиксируйте:
- команду сборки и используемую схему;
- версию Xcode и выбранные SDK;
- целевую платформу и deployment target;
- необходимость запуска Simulator или тестов на физическом устройстве;
- операции архивирования, экспорта и подписи;
- используемые плагины, скрипты и сторонние бинарные инструменты.
Дальше сопоставьте запись с таблицей Apple и реальными логами. Если проект использует несколько вариантов Xcode, не предполагайте, что все они смогут работать на одной и той же хостовой системе. Если команда пока не может отказаться от старой связки, сохраните отдельную очередь, пока совместимость замены не подтверждена. Плавающая метка runner не заменяет фиксацию проверенных версий и не даёт доказательства того, какой именно инструмент выполнил сборку.
Архитектура зависимостей важнее ярлыка узла
Надпись Apple Silicon на сервере сама по себе не отвечает на вопрос о переносимости проекта. Проверьте, как устроены нативные расширения, библиотеки, бинарные зависимости и тестовые утилиты. Для каждого компонента выясните, доступен ли нужный вариант для архитектуры целевого узла, требуется ли Intel или запуск через Rosetta и поддерживает ли поставщик используемый режим.
Разделите инвентаризацию на три группы:
- Исходный код и нативные расширения. Отметьте компоненты, которые компилируются вместе с приложением, генерируют бинарный код или используют системные API. Проверьте, что сборка действительно содержит ожидаемые архитектуры.
- Предварительно собранные зависимости. Найдите библиотеки, фреймворки, плагины и утилиты, которые поставляются только в готовом виде. Запишите архитектуру каждого файла и источник, из которого он попадает в сборку.
- Скрипты и тестовое окружение. Зафиксируйте интерпретаторы, инструменты генерации, тестовые драйверы и внешние команды. Скрипт может запускаться на новой системе, но вызывать неподходящий бинарный инструмент или зависеть от недоступного окружения.
Универсальный бинарный файл может помочь выпустить продукт для разных архитектур, но только если собранные компоненты и упаковка соответствуют задаче. Он не гарантирует, что все тесты пройдут или что зависимости поддерживают выбранный режим. Поэтому проверяйте не только код возвода компилятора, но и тестовые результаты, содержимое архива, подпись и запуск приложения на целевых конфигурациях.
Успешная сборка на Apple Silicon доказывает, что прошёл именно этот запуск и именно этот набор зависимостей. Она не доказывает сама по себе совместимость Intel-варианта, готовность выпуска или эквивалентность среды старого CI.
Для signed-сборок проверьте, где создаётся архив, как передаются сертификаты и где выполняется экспорт. Apple документирует подписание кода для распространения приложения Mac. Используйте эту документацию для проверки механики подписи, но отдельно зафиксируйте собственные границы доступа: кто может получить секреты и в каком задании они доступны. Не переносите реальные сертификаты в пробный контур без определённых правил доступа и очистки.
Воспроизводимость и обслуживание против скорости переноса
При выборе узла учитывайте не только возможность поставить нужную macOS. Владелец инфраструктуры должен управлять обновлениями системы, закреплением Xcode, очередями, изоляцией заданий и восстановлением после сбоя. Смена архитектуры может потребовать переделать инструменты и зависимости; считать её автоматическим повышением скорости нельзя без результатов сопоставимого измерения на вашем проекте.
Сначала определите, что именно меняется при переносе: только исполнитель, хостовая система, версия Xcode, архитектура или сразу всё перечисленное. Если одновременно обновить эти условия, неудачный тест трудно диагностировать: проблема может оказаться в коде, зависимости, инструменте или конфигурации узла. Для контрольного запуска зафиксируйте ревизию проекта, параметры сборки, версии инструментов и исходный маршрут задания.
Узнайте также, как runner получает задания и обрабатывает запросы из внешних веток. Для самоуправляемой инфраструктуры GitHub описывает жизненный цикл и требования к self-hosted runners; при использовании других систем CI применяйте их документацию и собственную модель доверия. Отдельно проверьте рискованные сценарии с доступом к секретам: рекомендации GitHub по безопасному использованию pull_request_target показывают, почему настройки запуска кода из запросов на слияние нужно анализировать отдельно от архитектуры узла.
Сравните общий и разделённый контуры. Общий узел проще описать организационно, но он не отменяет необходимости ограничить параллельные задания, доступ к файлам и секретам. Раздельные очереди дают более явную маршрутизацию между Intel и Apple Silicon, но означают дополнительные обязанности: поддерживать разные конфигурации, следить за обновлениями и проверять восстановление каждой среды. В обоих случаях используйте журналы заданий: в них должны быть видны назначенный узел, версии инструментов и причины выбора очереди.
Измеряйте не абстрактную «производительность Mac», а показатели конкретного рабочего процесса. Сопоставьте, сколько задач завершилось успешно, какие этапы требуют ручного вмешательства, где прерывается подпись и насколько воспроизводимо выполняется повторный запуск. Если разница во времени сборки имеет значение, сравнивайте одинаковую ревизию и одинаковые настройки, а не результаты разных веток или наборов тестов. До получения таких данных не включайте ожидаемое ускорение в обоснование закупки.
Общая стоимость против цены одного узла
Стоимость решения — это не только счёт за оборудование или аренду. Зафиксируйте для каждой схемы источник узла, реальный срок использования, занятость и простаивание, трудозатраты на обслуживание, подготовку среды и поддержку двух наборов инструментов. При параллельной работе включите повторную проверку заданий, стоимость резерва ёмкости и время, которое команда потратит на обслуживание старого контура.
Не подставляйте в расчёт публичную цену или заявленную конфигурацию, если они не проверены для конкретного предложения. Условия, доступные узлы, сроки аренды и способ предоставления среды нужно подтверждать на странице соответствующего решения непосредственно перед сравнением. Например, страница тарифов VMSPIN пригодна для сверки опубликованных условий, но ничего не подтверждает о наличии конфигурации или совместимости, если это прямо не указано.
Заполняйте расчёт значениями из журналов команды и проверенного предложения:
- дни или периоды фактического использования узла;
- часы работы на подготовку, обновление и восстановление;
- доля заданий, которым действительно нужна новая система;
- расходы на временное сохранение старой очереди;
- свободная ёмкость, которую нельзя использовать для других задач;
- трудозатраты на перенос зависимостей и проверку релизного процесса.
Для сопоставления вариантов используйте одинаковые границы: период наблюдения, набор задач, ожидаемую доступность и объём ручной поддержки. Если у вас нет надёжных данных по одному из показателей, оставьте его неизвестным и соберите измерения, а не подменяйте предположением. Так станет видно, является ли постоянный узел рациональным для регулярной нагрузки или гибкий удалённый вариант лучше подходит для пилота, сезонного выпуска и проверки совместимости.
При оценке удалённого Mac сверяйте обещания с конкретной страницей услуги, а не выводите доступность macOS, Xcode или аппаратуры из общего описания. Страница заказа VMSPIN помогает проверить опубликованные условия, но конфигурацию, способ подключения и требования к среде нужно считать подтверждёнными только тогда, когда они указаны непосредственно в предложении.
Проверка проекта против решения по календарю
Для миграции не нужно начинать с закупки: сначала выполните контрольный цикл на тех заданиях, которые представляют реальные релизы. Сохраните исходный вариант запуска, назначьте тестовую очередь и запишите результаты так, чтобы другой инженер мог повторить проверку.
Первый шаг — составьте реестр заданий. Для каждой цели отметьте требуемую macOS, Xcode, SDK, архитектуру, Simulator, тесты, подпись и пакетирование. Укажите владельца задания и то, является ли оно обязательным для выпуска.
Второй шаг — подтвердите квалификацию узлов. Для каждого Mac проверьте модель и установленную систему, затем сопоставьте систему с требованиями Xcode. Отдельно отметьте, какие задания Intel-узел может продолжать выполнять, а какие требуют Apple Silicon из-за целевой macOS.
Третий шаг — закрепите условия теста. Выберите репрезентативную ревизию проекта, установите фиксированные версии инструментов и запишите параметры команд. Не смешивайте проверку архитектуры с обновлением зависимостей или изменением логики сборки.
Четвёртый шаг — проверьте полный путь выпуска. Запустите сборку, требуемые тесты, архивирование и подпись. Проверьте артефакты и выполнение тестовых сценариев, а не только сообщение об успешной компиляции.
Пятый шаг — испытайте изоляцию. Убедитесь, что секреты доступны только предназначенным заданиям, временные файлы и артефакты не переходят между доверенными контекстами, а повторный запуск не использует случайно оставленное состояние.
Шестой шаг — проведите проверку восстановления. Зафиксируйте порядок возврата задания на прежнюю очередь или пересоздания среды. Выполните пробное восстановление и сохраните журналы, иначе план отката останется предположением.
Седьмой шаг — пересчитайте стоимость и нагрузку сопровождения. Используйте данные пробного периода и фактический объём задач. Решение о сроке содержания Intel-контура принимайте по остаточным обязательным сценариям, а не по желанию быстрее закончить миграцию.
Решение по условиям: сохранить Intel, добавить Apple Silicon или перейти на два контура
Используйте список как инструмент выбора. Отметьте все подходящие условия; если срабатывают разные ветви, временно разделите задания вместо того, чтобы принудительно переводить их на один узел.
- [ ] Если macOS 27 не требуется ни одному обязательному заданию, а Intel-контур проходит проверку целевой macOS, Xcode, зависимостей и выпуска — сохраните Intel. Планируйте замену только после появления конкретной задачи, требующей новой системы.
- [ ] Если хотя бы одно обязательное задание должно выполняться под macOS 27 — добавьте проверенную среду Apple Silicon. Не направляйте это задание на Intel, даже если приложение собирается как универсальное.
- [ ] Если одновременно нужны macOS 27 и старая связка инструментов или Intel-проверки — оставьте два маршрута на период проверки. На Apple Silicon проверяйте новую системную цель, на Intel сохраняйте подтверждённые старые сценарии.
- [ ] Если новая среда прошла сборку, тестирование, подпись и восстановление, а обязательные старые задания перенесены либо сняты — подготовьте сворачивание Intel-контура. Назначьте владельца и сохраните результаты проверок.
- [ ] Если остаются неподтверждённые зависимости, нестабильная подпись или неиспытанный откат — не объявляйте перенос завершённым. Сохраните проверенную очередь и устраните конкретный пробел до смены маршрута по умолчанию.
Выбор между покупкой, арендой и отсрочкой делайте после технической квалификации среды и оценки нагрузки на сопровождение. Если подходят сразу несколько пунктов, это не противоречие: например, Apple Silicon может быть необходим для macOS 27, а Intel — для отдельной старой проверки. Длительность параллельной работы задавайте условиями завершения: какие задачи должны пройти, какие журналы сохранены, кто одобряет выпуск и как восстановить узел.
Частые вопросы
Нужен ли Apple Silicon для заданий CI под macOS 27?
Да, если задание должно исполняться именно под macOS 27: по данным Apple, эта система поддерживает только Mac на Apple Silicon. Проверяйте право установить целевую macOS независимо от того, собираете ли вы универсальное приложение. Intel-узел может сохранить роль в контуре старой системы, если проверены его macOS, Xcode и зависимости.
Какие задания CI можно оставить на Intel Mac?
Оставляйте только задачи с подтверждённой совместимостью хостовой системы, Xcode и используемых инструментов. Это могут быть сборки для старых целевых окружений или проверки Intel-зависимого кода. Успешная компиляция не заменяет проверку тестов, архива, подписи и требований публикации.
Как разделить сборки под macOS 27 и старый Xcode?
Задайте отдельные очереди или метки и направляйте задания по зафиксированным требованиям к системе и инструментам. На Apple Silicon проверьте задачи, которым необходима macOS 27; на Intel оставьте только совместимые старые сценарии. Сохраняйте сведения о назначенном узле, версиях Xcode и результатах полного цикла выпуска.
Как долго держать параллельный Intel-контур?
Ориентируйтесь на оставшиеся обязательные задачи, а не на произвольную дату. Сохраняйте старый контур, пока не подтверждены перенос зависимостей, выпуск и восстановление или пока он нужен для прежних целей. Перед отключением оцените фактическую нагрузку и обслуживание обеих сред, затем задокументируйте решение и план возврата.
Следующий шаг — проверить задачу, а не покупать узел заранее
Сначала сопоставьте цели выпуска с требованиями macOS и Xcode, затем измерьте реальные сборки, тесты и восстановление. Если ваш текущий вариант — один Intel-узел, который не может принять нужную систему, преждевременное обновление всей инфраструктуры всё равно не решает задачи старого инструментария. А если вы держите две очереди без владельцев, журналов и испытанного отката, растут повторная работа, нагрузка на сопровождение и риск ошибочной маршрутизации.
Если для пилота или временной дополнительной очереди вам нужен удалённый Mac, проверьте опубликованные условия VMSPIN и сопоставьте их со своей матрицей целей и инструментов. Используйте только подтверждённые на странице параметры: если нужная вам система, конфигурация или способ доступа там не указаны, не считайте их гарантированными и запросите уточнение до переноса CI.