Сбой на нативной зависимости или частые правки 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.
Что именно меняется после перехода на 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, а с конкретным нативным модулем или скриптом проекта.
Почему нельзя сравнивать только цену одной сборки
У облачного процесса есть как минимум четыре измеряемых элемента:
- время ожидания запуска;
- продолжительность самой сборки;
- доля неуспешных повторных запусков;
- расход включённых или оплачиваемых ресурсов.
У собственного узла добавляются другие статьи:
- аренда или покупка машины;
- обслуживание macOS и Xcode;
- хранение кэша и артефактов;
- резервный доступ и восстановление;
- защита ключей подписи;
- время инженера на обновления и диагностику.
Актуальные тарифы и доступные лимиты EAS Build нужно брать только из официальной страницы тарифов в день расчёта. Они могут измениться, как и состав образов. Для сравнения зафиксируйте период, число успешных сборок, среднее ожидание и количество повторов. Без этого цена «за один запуск» вводит в заблуждение.
Независимый разработчик: облако обычно быстрее приводит к релизу
Если проект не содержит сложных нативных изменений, сборки выполняются время от времени, а среду не нужно сохранять между запусками, начните с EAS Build. Это разумный выбор для MVP и стандартного приложения на Expo SDK 57.
Преимущества:
- не нужно самостоятельно поддерживать Mac;
- сборка запускается по описанному профилю;
- журнал и артефакт находятся в одном процессе;
- не требуется держать отдельный узел постоянно доступным.
Ограничения:
- вы зависите от доступного образа и его обновлений;
- часть диагностики приходится вести по журналу;
- нестандартные скрипты могут требовать дополнительной настройки;
- ожидание и лимиты нужно учитывать в расписании релиза.
Проверьте проект последовательно:
- Зафиксируйте версию Expo SDK, React Native и Node.js в документации и файлах проекта.
- Проверьте
package.json, lock-файл и список конфигурационных плагинов. - Создайте отдельный профиль сборки без экспериментальных переменных.
- Запустите чистую iOS-сборку и сохраните полный журнал.
- Зафиксируйте время ожидания, продолжительность и причину каждого повтора.
- Проверьте архив или другой итоговый артефакт перед публикацией.
- Повторите тест после изменения нативной зависимости.
Если все эти шаги проходят без ручного вмешательства, удалённый Mac на данном этапе будет добавлять обслуживание, а не решать проблему.
Команда с нативными модулями: контроль среды важнее удобства старта
Когда репозиторий содержит каталог ios, изменяемые Pod-зависимости, конфигурационные плагины или собственные Build Settings, удалённый Mac становится инструментом диагностики. Вы видите не только итоговый лог, но и промежуточное состояние проекта.
Сценарий из практики выглядит так: облачная сборка завершается ошибкой после установки Pod-зависимости. Повторный запуск даёт тот же результат, но журнал не объясняет, какая комбинация скрипта, lock-файла и переменной окружения стала причиной. На удалённом Mac инженер может выполнить команды по отдельности, проверить каталог Pods, открыть проект в Xcode 26.6, изменить настройку и снова создать архив. Совместимость версии Xcode следует сверять с официальными заметками о выпуске Xcode 26.6, а не с неподтверждёнными обсуждениями.
Для такого проекта полезны следующие условия остановки:
- ошибка воспроизводится на реальном проекте;
- причина локализована до зависимости, скрипта или настройки;
- исправление повторно проходит сборку;
- создаётся корректный архив;
- результат можно повторить после очистки временных файлов.
Простое подключение Mac не доказывает его пользу. Если на нём нельзя воспроизвести сбой и повторить архивирование, вы получили ещё одну среду, но не решение.
Приватные зависимости и monorepo требуют проверки границ доступа
Monorepo сам по себе не доказывает необходимость удалённого Mac. Решение зависит от того, какие ресурсы нужны во время сборки.
Проверьте:
- приватный npm-источник;
- Git-подмодули и закрытые репозитории;
- внутренние CocoaPods;
- рабочие пути и симлинки;
- скрипты, ожидающие конкретный каталог;
- доступ к внутреннему API или хранилищу;
- переменные окружения, которые нельзя передавать в общий контур.
Для типовых монорепозиториев используйте официальное руководство Expo по monorepo. Облачный процесс может покрыть часть требований настройками рабочего каталога, зависимостей и переменных. Но если сборка должна обращаться к закрытой сети или внутреннему реестру, удалённый Mac даёт более прямой контроль маршрутов, сертификатов и диагностических команд.
Соберите доказательства, а не делайте вывод по размеру репозитория:
- журнал установки зависимостей;
- lock-файлы;
- список сетевых обращений;
- результат проверки DNS и сертификатов;
- карту переменных окружения;
- перечень файлов, используемых скриптами.
Если приватный ресурс можно безопасно предоставить облачному процессу, переносить весь CI на Mac необязательно. Если доступ связан с внутренней сетью, специальным сертификатом или нестандартным инструментом, сначала проведите короткий тест на удалённой машине.
Высокая частота CI: считайте стоимость ожидания и повторов
Для частого CI главный вопрос — не «где дешевле один запуск», а «сколько полезных артефактов команда получает за рабочий период». В расчёт включите успешные сборки, среднее время ожидания, попадание в кэш, загрузку узла и повторные запуски после сбоев.
У облачного процесса сильные стороны:
- временная изоляция окружения;
- меньше постоянного обслуживания;
- удобное масштабирование независимых запусков;
- понятная граница между проектом и инфраструктурой.
У постоянного удалённого Mac другие преимущества:
- сохраняется кэш зависимостей;
- можно устанавливать внутренние инструменты;
- проще запускать нестандартные скрипты;
- доступно интерактивное расследование;
- один узел можно использовать как долгоживущий CI-ресурс.
Но повторное использование создаёт риск загрязнения среды. Один проект может изменить настройки, ключи, кэш или версии инструментов для другого. Поэтому вам понадобятся отдельные пользователи, каталоги, расписание очистки и журнал изменений.
Перед сменой архитектуры соберите данные минимум по одной реальной серии сборок:
- идентификатор коммита;
- тип запуска;
- время ожидания;
- время выполнения;
- успех или причина отказа;
- наличие кэша;
- время повторного запуска;
- использованные секреты и сетевые ресурсы.
Сравнивайте облако и удалённый Mac на одинаковом коммите. Иначе различия в коде будут ошибочно приняты за эффект инфраструктуры.
Подписи и секреты: локальное выполнение не означает автономность
Сертификаты подписи, профили, токены приватных источников и переменные окружения должны рассматриваться как отдельный контур риска. В облачной схеме нужно выяснить, где секрет хранится, когда передаётся и что попадает в журнал. На удалённом Mac дополнительно проверяются доступ root, резервные копии, удалённые сессии и процедура очистки узла.
Составьте схему потока:
- откуда секрет поступает;
- в каком виде хранится;
- какой процесс получает доступ;
- какие команды используют его;
- может ли значение попасть в лог;
- когда оно удаляется или заменяется;
- кто проверяет завершение сессии.
Для CI с повышенными требованиями полезно разделить стандартный релиз и расследование. В первом контуре секреты выдаются только на время сборки. Во втором удалённый Mac используется для диагностики с минимально необходимыми правами. Root-доступ удобен для настройки, но не должен означать, что каждый скрипт проекта получает бесконтрольный доступ ко всей машине.
Не принимайте «локальная сборка EAS Build» за полностью автономный процесс. Документация о локальных сборках EAS Build описывает условия и ограничения такого режима. Отдельные операции всё равно могут требовать связи с сервисами, репозиториями или системами подписывания.
Двойной контур: проверка перед окончательным выбором
Для профессиональной команды наиболее безопасен короткий параллельный тест. Один и тот же коммит проходит через EAS Build и удалённый Mac. После этого сравниваются не впечатления разработчиков, а артефакты и журналы.
Порядок проверки:
- Зафиксируйте commit SHA, версию Expo SDK 57, lock-файлы и профиль сборки.
- Запустите облачную сборку и сохраните журнал, время ожидания и артефакт.
- Подготовьте на удалённом Mac те же зависимости и переменные окружения.
- Выполните
prebuild, установку Pod-зависимостей иxcodebuild. - Проверьте версию приложения, идентификатор, подпись и архив.
- Выполните проверку перед загрузкой в канал распространения.
- Имитируйте обрыв SSH или VNC и проверьте, сохраняется ли задача.
- Повторите сборку после исправления ошибки и сравните результаты.
Для удалённой машины полезно заранее проверить процесс 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, а долгосрочное решение принимать только по результатам этой фиксации.