Сбой на нативной зависимости или частые правки ios тормозят релиз — выбирайте удалённый Mac; стандартный Expo-проект с редкими сборками — облачную сборку. Если требования меняются от релиза к релизу, оставляйте двойной контур: EAS Build для обычных публикаций, удалённый Mac для диагностики и предварительной проверки.

Эта статья предназначена для трёх групп:

  • независимых разработчиков, которым нужно выпустить приложение с минимальными операционными затратами;
  • React Native-команд, регулярно меняющих ios, Pod-конфигурацию, плагины и параметры Xcode;
  • DevOps- и платформенных инженеров, оценивающих CI, приватную сеть, подписи и контроль среды.

Последняя проверка: 25 августа 2026 года. Дата выпуска Expo SDK 57 и соответствие React Native 0.86 сверены с официальной записью о выпуске Expo SDK 57. Требования версии, образы сборки и ограничения проверены по справочнику версий Expo, документации EAS Build и материалам по Xcode 26.6.

01

Что именно меняется после перехода на Expo SDK 57

Expo SDK 57 опубликован 30 июня 2026 года и соответствует React Native 0.86 — это подтверждено официальным объявлением. Поэтому решение о среде нельзя принимать по старому успешному запуску проекта: после обновления нужно заново проверить версии Node.js, нативных зависимостей, конфигурационных плагинов, CocoaPods и Xcode.

Справочник Expo SDK 57 следует использовать как контрольную точку, а не как замену испытания проекта. В нём проверяют:

  • минимальные требования к инструментам;
  • совместимость модулей;
  • ограничения конкретного SDK;
  • параметры профиля сборки;
  • доступные образы для EAS Build.

В облачном варианте вы получаете управляемую последовательность действий и журнал сборки. Но журнал не всегда показывает то, что важно при интерактивной отладке: состояние локального кэша, содержимое промежуточных каталогов, поведение скрипта после ручного изменения проекта или результат отдельной команды в Xcode.

На удалённом Mac вы можете поэтапно выполнить npx expo prebuild, pod install, xcodebuild и архивацию, остановиться на проблемном шаге, изменить файл и повторить операцию. Это особенно важно, если ошибка связана не с Expo SDK, а с конкретным нативным модулем или скриптом проекта.

Почему нельзя сравнивать только цену одной сборки

У облачного процесса есть как минимум четыре измеряемых элемента:

  1. время ожидания запуска;
  2. продолжительность самой сборки;
  3. доля неуспешных повторных запусков;
  4. расход включённых или оплачиваемых ресурсов.

У собственного узла добавляются другие статьи:

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

Актуальные тарифы и доступные лимиты EAS Build нужно брать только из официальной страницы тарифов в день расчёта. Они могут измениться, как и состав образов. Для сравнения зафиксируйте период, число успешных сборок, среднее ожидание и количество повторов. Без этого цена «за один запуск» вводит в заблуждение.

02

Независимый разработчик: облако обычно быстрее приводит к релизу

Если проект не содержит сложных нативных изменений, сборки выполняются время от времени, а среду не нужно сохранять между запусками, начните с EAS Build. Это разумный выбор для MVP и стандартного приложения на Expo SDK 57.

Преимущества:

  • не нужно самостоятельно поддерживать Mac;
  • сборка запускается по описанному профилю;
  • журнал и артефакт находятся в одном процессе;
  • не требуется держать отдельный узел постоянно доступным.

Ограничения:

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

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

  1. Зафиксируйте версию Expo SDK, React Native и Node.js в документации и файлах проекта.
  2. Проверьте package.json, lock-файл и список конфигурационных плагинов.
  3. Создайте отдельный профиль сборки без экспериментальных переменных.
  4. Запустите чистую iOS-сборку и сохраните полный журнал.
  5. Зафиксируйте время ожидания, продолжительность и причину каждого повтора.
  6. Проверьте архив или другой итоговый артефакт перед публикацией.
  7. Повторите тест после изменения нативной зависимости.

Если все эти шаги проходят без ручного вмешательства, удалённый Mac на данном этапе будет добавлять обслуживание, а не решать проблему.

03

Команда с нативными модулями: контроль среды важнее удобства старта

Когда репозиторий содержит каталог ios, изменяемые Pod-зависимости, конфигурационные плагины или собственные Build Settings, удалённый Mac становится инструментом диагностики. Вы видите не только итоговый лог, но и промежуточное состояние проекта.

Сценарий из практики выглядит так: облачная сборка завершается ошибкой после установки Pod-зависимости. Повторный запуск даёт тот же результат, но журнал не объясняет, какая комбинация скрипта, lock-файла и переменной окружения стала причиной. На удалённом Mac инженер может выполнить команды по отдельности, проверить каталог Pods, открыть проект в Xcode 26.6, изменить настройку и снова создать архив. Совместимость версии Xcode следует сверять с официальными заметками о выпуске Xcode 26.6, а не с неподтверждёнными обсуждениями.

Для такого проекта полезны следующие условия остановки:

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

Простое подключение Mac не доказывает его пользу. Если на нём нельзя воспроизвести сбой и повторить архивирование, вы получили ещё одну среду, но не решение.

04

Приватные зависимости и monorepo требуют проверки границ доступа

Monorepo сам по себе не доказывает необходимость удалённого Mac. Решение зависит от того, какие ресурсы нужны во время сборки.

Проверьте:

  • приватный npm-источник;
  • Git-подмодули и закрытые репозитории;
  • внутренние CocoaPods;
  • рабочие пути и симлинки;
  • скрипты, ожидающие конкретный каталог;
  • доступ к внутреннему API или хранилищу;
  • переменные окружения, которые нельзя передавать в общий контур.

Для типовых монорепозиториев используйте официальное руководство Expo по monorepo. Облачный процесс может покрыть часть требований настройками рабочего каталога, зависимостей и переменных. Но если сборка должна обращаться к закрытой сети или внутреннему реестру, удалённый Mac даёт более прямой контроль маршрутов, сертификатов и диагностических команд.

Соберите доказательства, а не делайте вывод по размеру репозитория:

  • журнал установки зависимостей;
  • lock-файлы;
  • список сетевых обращений;
  • результат проверки DNS и сертификатов;
  • карту переменных окружения;
  • перечень файлов, используемых скриптами.

Если приватный ресурс можно безопасно предоставить облачному процессу, переносить весь CI на Mac необязательно. Если доступ связан с внутренней сетью, специальным сертификатом или нестандартным инструментом, сначала проведите короткий тест на удалённой машине.

05

Высокая частота CI: считайте стоимость ожидания и повторов

Для частого CI главный вопрос — не «где дешевле один запуск», а «сколько полезных артефактов команда получает за рабочий период». В расчёт включите успешные сборки, среднее время ожидания, попадание в кэш, загрузку узла и повторные запуски после сбоев.

У облачного процесса сильные стороны:

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

У постоянного удалённого Mac другие преимущества:

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

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

Перед сменой архитектуры соберите данные минимум по одной реальной серии сборок:

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

Сравнивайте облако и удалённый Mac на одинаковом коммите. Иначе различия в коде будут ошибочно приняты за эффект инфраструктуры.

06

Подписи и секреты: локальное выполнение не означает автономность

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

Составьте схему потока:

  1. откуда секрет поступает;
  2. в каком виде хранится;
  3. какой процесс получает доступ;
  4. какие команды используют его;
  5. может ли значение попасть в лог;
  6. когда оно удаляется или заменяется;
  7. кто проверяет завершение сессии.

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

Не принимайте «локальная сборка EAS Build» за полностью автономный процесс. Документация о локальных сборках EAS Build описывает условия и ограничения такого режима. Отдельные операции всё равно могут требовать связи с сервисами, репозиториями или системами подписывания.

07

Двойной контур: проверка перед окончательным выбором

Для профессиональной команды наиболее безопасен короткий параллельный тест. Один и тот же коммит проходит через EAS Build и удалённый Mac. После этого сравниваются не впечатления разработчиков, а артефакты и журналы.

Порядок проверки:

  1. Зафиксируйте commit SHA, версию Expo SDK 57, lock-файлы и профиль сборки.
  2. Запустите облачную сборку и сохраните журнал, время ожидания и артефакт.
  3. Подготовьте на удалённом Mac те же зависимости и переменные окружения.
  4. Выполните prebuild, установку Pod-зависимостей и xcodebuild.
  5. Проверьте версию приложения, идентификатор, подпись и архив.
  6. Выполните проверку перед загрузкой в канал распространения.
  7. Имитируйте обрыв SSH или VNC и проверьте, сохраняется ли задача.
  8. Повторите сборку после исправления ошибки и сравните результаты.

Для удалённой машины полезно заранее проверить процесс iOS-сборки EAS Build, а для облачной среды — текущие образы инфраструктуры EAS Build. Версия образа, доступные инструменты и ограничения могут измениться, поэтому результат теста привязывайте к дате.

Поставьте отметки только после успешного выполнения:

  • [ ] Один и тот же коммит собирается в обоих контурах.
  • [ ] Версии зависимостей и инструменты записаны в отчёте.
  • [ ] Ошибка из облака воспроизводится на удалённом Mac или объяснено, почему нет.
  • [ ] Исправление проходит повторную архивацию.
  • [ ] Подпись проверена без раскрытия секретов в журнале.
  • [ ] Приватные источники доступны только разрешённому процессу.
  • [ ] Обрыв удалённой сессии не уничтожает незавершённую задачу.
  • [ ] Есть процедура очистки кэша и отзыва временных ключей.
  • [ ] Команда знает, какой контур используется для обычного релиза.
  • [ ] Есть резервный маршрут при недоступности выбранной среды.
Профиль команды Основной контур Когда нужен удалённый Mac Условие пересмотра
Независимый разработчик или MVP EAS Build Нативная ошибка не объясняется журналом Два повторяемых сбоя на одном проекте
Команда с частыми изменениями ios Удалённый Mac или двойной контур Нужны Xcode, Pod и пошаговая диагностика Ошибка не воспроизводится вне облака
Monorepo с приватными ресурсами По результатам сетевого теста Нужны внутренняя сеть, сертификаты или закрытые зависимости Облачный процесс получает безопасный доступ
Высокочастотный CI Сравнительный пилот Нужны кэш, постоянный узел и специальные инструменты Стоимость обслуживания выше измеренной экономии
Команда с жёстким контролем секретов Двойной контур Нужна изолированная диагностика и ручной аудит Не утверждены потоки учётных данных

Частые вопросы

Нужен ли Mac для сборки iOS-приложения на Expo SDK 57?
Для стандартного проекта — не обязательно: EAS Build может выполнить облачную сборку. Но при нативной отладке, работе с Xcode, приватными зависимостями и нестандартной подписью нужен доступ к macOS. Это может быть не личный компьютер, а удалённый Mac с контролируемыми правами.

В чём практическая разница между EAS Build и удалённым Mac?
EAS Build снимает с вас обслуживание узла, но ограничивает контроль внутреннего состояния процесса. Удалённый Mac позволяет вручную запускать команды, исследовать каталоги, менять настройки Xcode и сохранять инструменты. Поэтому первое решение подходит для повторяемого стандартного релиза, второе — для сложной диагностики и кастомного CI.

Как перенести сбой облачной сборки на Mac?
Сохраните commit SHA, полный лог, профиль, lock-файлы и переменные окружения без самих секретов. На удалённом Mac установите совпадающие версии инструментов, затем повторите prebuild, установку Pod-зависимостей и xcodebuild. Сравните сетевой доступ, скрипты и состояние кэша, а после исправления создайте новый архив.

Когда пора строить собственный macOS CI?
Не после достижения определённого размера проекта, а после измеримого повторяющегося ограничения. Сигналами служат длительное ожидание, постоянные повторы, обязательный доступ к закрытой сети, сохранение кэша и частая работа в Xcode. Сначала проведите параллельный тест, затем сравните время инженеров и стабильность артефактов.

Можно ли выполнять локальную сборку EAS Build на удалённом Mac?
Да, если машина соответствует требованиям инструментов и имеет нужный сетевой доступ. Но локальный режим не гарантирует работу без внешних сервисов: проверьте обращения к репозиториям, системам подписывания и сервисам сборки. Отдельно настройте хранение секретов, права пользователей и удаление временных данных.

Если сейчас вы используете только облачную сборку, её слабые места обычно проявляются в ограниченной интерактивной диагностике, зависимости от образа, ожидании доступного ресурса и сложностях с закрытой сетью. Если же сразу купить и постоянно обслуживать отдельный Mac, вы получите расходы на обновления, защиту ключей, резервный доступ и восстановление после ошибок. Для сравнения с арендой можно отдельно изучить вариант Mac mini для длительной эксплуатации, но перед покупкой или постоянной настройкой узла разумнее сначала взять удалённый Mac в KVMNODE на короткий срок, повторить реальный Expo-проект, проверить нативные зависимости, архивацию и восстановление после разрыва сессии. Подходящие варианты доступа можно посмотреть на странице удалённых Mac KVMNODE, а долгосрочное решение принимать только по результатам этой фиксации.