Сбой после перехода на SDK → сначала найдите первую содержательную ошибку
В примечаниях к Expo SDK 58 описаны изменения и границы миграции, в том числе требования, связанные с переходом iOS 27 SDK на жизненный цикл scene-based. Это не означает, что каждый проект на SDK 58 обязан ломаться при сборке. Если iOS EAS Build завершился ошибкой, сначала откройте полный журнал Xcode и найдите первую содержательную ошибку; затем проверьте миграцию, состав загруженного архива, переменные среды и подпись.
Кому пригодится: независимым разработчикам, у которых сборка iOS перестала проходить после обновления Expo SDK 58.
Небольшим командам с config plugin, собственным каталогом iOS или нативными модулями.
Разработчикам без локального Mac, которым нужно понять, когда облачный сбой стоит воспроизвести в macOS.
Последнее обновление: 6 ноября 2026 года. Факты сверены с журналом изменений Expo SDK 58, документацией EAS Build и текущими требованиями Apple к Xcode.
Мы не связываем ошибку с обновлением только потому, что она появилась сразу после него. Совпадение по времени — отправная точка для сравнения изменений, но не установленная причина. До правок зафиксируйте коммит, профиль сборки, используемую среду EAS и полный лог. Иначе повторные попытки могут менять сразу несколько условий и скрыть исходную проблему.
Как читать журнал, чтобы не чинить последнюю строку
Краткая карточка задания полезна для первичной ориентации, но часто не показывает контекст ошибки. В руководстве Expo по диагностике сборок iOS и журналам Xcode описано, как получить полный журнал и анализировать этап, на котором остановилась сборка. Найдите первый сбой, который объясняет последующие сообщения, а не просто последнюю строку со статусом ошибки.
Полезно разделять сообщения по смыслу:
- ошибка команды или скрипта до запуска компиляции может указывать на конфигурацию, установку зависимостей или подготовку проекта;
- ошибка разрешения пакета либо отсутствующий файл чаще направляют проверку к составу архива и установке зависимостей;
- сообщение компилятора Swift, Clang или Xcode относится к нативному этапу;
- ошибка экспорта архива и подписи появляется уже после успешной компиляции;
- успешный статус сборки не исключает последующего сбоя при запуске приложения.
Сохраните фрагмент лога вокруг первого содержательного сообщения и сопоставьте его с изменениями после последней успешной сборки. Особенно важны package.json, lock-файл, app.json или app.config.*, config plugins, каталог ios и профиль EAS. Не начинайте с массового обновления пакетов или удаления сертификатов: такие действия могут добавить новые переменные, не исправив первопричину.
Где искать ошибку в iOS EAS Build в первую очередь? В полном журнале Xcode и в контексте самого раннего сбойного шага. Сводка задания помогает определить направление, но финальное сообщение часто лишь повторяет, что процесс завершился неуспешно.
git status --short
npx expo-doctor
Первую команду используйте, чтобы увидеть незакоммиченные изменения, вторую — как дополнительную проверку состояния проекта. Результат expo-doctor сам по себе не доказывает, что найденная проблема вызвала сбой. Сверьте предупреждение с логом сборки и изменениями проекта.
Миграция и нативный проект: проверяйте только используемые пути
Изменения SDK могут затрагивать разные API и нативные механизмы. Из этого не следует, что каждый пункт журнала миграции относится к любому приложению. Сначала отметьте, какие функции и нативные зависимости действительно используются, а затем сопоставьте их с официальными примечаниями Expo SDK 58. Если проект не задействует описанный путь, не объявляйте его причиной только по совпадению версии.
Особенно аккуратно проверяйте состояние каталога ios. В проекте, где нативные файлы генерируются через Continuous Native Generation (CNG), ошибки могут возникать в config plugin или в полученном результате prebuild. Если команда вручную поддерживает ios, редактирует AppDelegate или использует собственный нативный модуль, сравните эти изменения с миграционными требованиями и текущими зависимостями. Не перезаписывайте собственные файлы генерацией, пока не сохраните изменения и не выясните, как они были добавлены.
npx expo config --type prebuild
Вывод помогает проверить конфигурацию, используемую при подготовке нативного проекта. Это не замена сборке и не гарантирует, что сгенерированные файлы полностью совпадут с теми, что фактически попадут в облачное задание. Для конкретной ошибки сверяйте вывод команды с журналом и конфигурацией сборки.
Отдельная граница — инструментарий Apple. Требования зависят от используемой версии Xcode и среды macOS. Перед локальным воспроизведением проверьте актуальную таблицу совместимости Xcode с macOS и SDK на сайте Apple. Сравнение «на моём компьютере собирается» мало что доказывает, если локальная среда использует другой Xcode или другую конфигурацию зависимостей.
Облачная сборка получила не тот проект или не те переменные
В EAS Build собирается то, что попало в загруженный архив, а не обязательно всё, что видно в рабочей папке разработчика. Локальный файл, не добавленный в Git, может присутствовать на компьютере, но отсутствовать в сборочной среде. Поэтому при ошибке «файл не найден», невозможности разрешить пакет или неожиданной конфигурации проверьте правила исключения и фактический входной состав.
Документация Expo описывает правила формирования архива в разделе .easignore и загрузки проекта. Сравните .easignore, .gitignore и список отслеживаемых файлов. Не считайте незакоммиченный файл гарантированным входом сборки.
git status --short
git ls-files
Первая команда показывает незакоммиченные изменения, вторая — файлы, отслеживаемые Git. Это простой первичный контроль, но он не подменяет проверку правил .easignore и журнала загрузки EAS. Если сборка зависит от локального файла, убедитесь, что выбранный способ его передачи действительно включает его в архив.
Затем отделите установку JavaScript-зависимостей от установки нативных компонентов и компиляции Xcode. Если первым падает установка пакетов — начните с lock-файла, версии менеджера пакетов и доступности зависимости. Если файлы отсутствуют уже при подготовке проекта — проверьте архив и плагины. Если ошибка появляется в компиляторе — переходите к нативному исходному коду и совместимости инструментов.
Переменные среды проверяйте отдельно от файлов архива. Нужная переменная может отсутствовать в выбранном профиле, иметь другое значение для среды сборки либо быть доступной только на этапе, где она действительно предусмотрена. Сверьтесь с документацией EAS по переменным среды и укажите профиль и среду, использованные в конкретном задании. Не публикуйте секреты в логах или диагностическом сообщении.
Что проверять, если локально сборка проходит, а облачная нет? Сначала сравните коммит, lock-файл и входные файлы, затем версии Node.js, менеджера пакетов и Xcode, профиль EAS и переменные среды. Локальный успех показывает, что один набор условий работает; он не доказывает, что облачная среда получила те же файлы и настройки.
| Признак | Что проверить в проекте и облачной среде | Следующий шаг |
|---|---|---|
| Сбой при установке зависимостей | Lock-файл, менеджер пакетов, доступность и версии пакетов | Повторить установку без смены lock-файла и сопоставить её лог с EAS |
| Не найден файл или ресурс | Git-отслеживание, .easignore, конфигурационные файлы |
Проверить состав архива и правила исключения |
| Ошибка при генерации iOS-проекта | Config plugins, конфигурацию Expo, собственные нативные правки | Сопоставить результат prebuild с ожидаемыми нативными файлами |
| Ошибка компилятора | Версии Xcode, Swift и нативных зависимостей | Сравнить полный текст ошибки с требованиями используемого инструментария |
| Ошибка экспорта или подписи | Профиль EAS, сертификаты, provisioning profile и Apple Team | Проверить именно этап подписи, не сбрасывая настройки компиляции |
Таблица не устанавливает причину автоматически. Это маршрут проверки: решающим остаётся самый ранний сбойный этап в журнале. Похожие финальные статусы могут возникать из-за совершенно разных проблем.
Не вставляйте секреты из переменных среды, сертификаты или приватные ключи в открытый фрагмент журнала. Для разбора достаточно названия переменной, используемого профиля и указания, задано ли значение в нужной среде.
Подпись, архив и запуск приложения — разные неисправности
Успешная компиляция не равна успешно подписанному архиву, а успешный архив не гарантирует корректный запуск на устройстве. Если ошибка появляется при экспорте, проверьте идентификатор приложения, Apple Team, назначенные учётные данные и provisioning profile. Не отзывайте и не создавайте заново сертификаты, если лог указывает на несовместимость нативного кода: подпись не исправит компиляционную ошибку.
После исправления повторите сборку на том же коммите и с тем же профилем, меняя только подтверждённую причину. Проверьте итоговый статус архива, подпись и последующую загрузку. Если сборка завершилась, но приложение падает или показывает неправильный экран, переключитесь на диагностику запуска: соберите сведения с устройства и воспроизведите проблему на release-сборке. Рекомендации Expo по разбору ошибок iOS-сборки помогают не смешивать сбой сборочного процесса и ошибку работающего приложения.
Изменения SDK 58, относящиеся к жизненному циклу scene-based в контексте iOS 27 SDK, нужно исследовать тогда, когда приложение действительно использует затронутый нативный путь. Одной даты обновления SDK недостаточно, чтобы заключить, что именно это изменение вызвало падение или неправильный интерфейс. Для начала зафиксируйте воспроизводимый сценарий: тип сборки, устройство или симулятор, момент сбоя и соответствующий журнал.
Когда нужен Mac для воспроизведения, а когда достаточно EAS
Отсутствие локального Mac не мешает диагностировать многие ошибки: полный лог, Git-состояние, lock-файл, конфигурация Expo и сведения о переменных помогают найти пропуски в проекте. Но если сбой требует запуска Xcode, проверки нативной генерации или интерактивного анализа поведения приложения, локальная macOS-среда становится полезной. Её версии Xcode и macOS должны соответствовать условиям, которые вы проверяете; актуальные границы совместимости публикует Apple.
EAS поддерживает локальную сборку. Порядок и ограничения описаны в документации Expo о локальных сборках. Локальный запуск имеет смысл как контролируемое сравнение, но это не точная копия облака автоматически: переменные, файлы, доступные секреты и версия инструментов могут различаться. Поэтому записывайте, что именно совпадает и что отличается.
| Вариант проверки | Когда подходит | Что не следует считать доказанным |
|---|---|---|
| Повторная сборка EAS с тем же коммитом | Нужно проверить воспроизводимость облачного сбоя | Что причина уже найдена, если изменилось несколько настроек |
| Локальная EAS-сборка на Mac | Подозрение на Xcode, нативную компиляцию или результат генерации | Что локальная среда полностью идентична облачной |
| Сопоставление журналов и конфигурации без Mac | Ошибка указывает на архив, зависимости, профиль или переменные | Что любой нативный сбой можно окончательно локализовать только по краткой сводке |
Решение по условиям
- Если самая ранняя ошибка относится к отсутствующему файлу, переменной среды, профилю или зависимости — сначала исправьте проект и повторите EAS Build; Mac не обязателен для первого шага.
- Если лог указывает на нативную компиляцию, config plugin или генерацию каталога iOS — сначала сопоставьте версию Xcode и конфигурацию, затем воспроизведите проект на Mac с подходящей средой.
- Если локальный запуск проходит, а EAS падает — сравните архив, версии инструментов, профиль и переменные; не объявляйте облачную платформу причиной до проверки различий.
- Если сборка завершилась, но приложение падает при запуске — не меняйте подпись вслепую; исследуйте release-поведение и журнал устройства.
- Если ошибка относится к сертификату или provisioning profile — исправляйте учётные данные и идентификаторы только после подтверждения, что компиляция и экспорт дошли до этапа подписи.
Для планирования доступной macOS-среды полезно заранее решить, нужна ли постоянная машина или временный доступ для диагностики. Сравнить варианты удалённого доступа и использования Mac можно в обзоре вариантов Mac-среды. При выборе удалённого узла учитывайте не только вычислительную задачу, но и удобство интерактивной работы: просмотр Xcode, управление симулятором и передача файлов должны соответствовать сценарию проверки. Сведения о доступных площадках собраны на странице расположения центров обработки данных.
Воспроизводимый порядок проверки
Чтобы результат не зависел от случайных изменений, мы рекомендуем вести диагностику как последовательный эксперимент:
- Зафиксируйте коммит, профиль EAS, выбранную среду и время сборки. Сохраните полный лог, не ограничиваясь карточкой задания.
- Найдите первый содержательный сбой и определите этап: установка, загрузка или подготовка проекта, нативная компиляция, архивирование, подпись либо запуск.
- Сверьте изменения после последней успешной сборки: Expo SDK, lock-файл, config plugins, собственные файлы iOS и переменные среды.
- Проверьте входной архив, правила
.easignoreи наличие обязательных файлов в Git. Отдельно подтвердите, что нужная переменная задана для того профиля, которым запускается сборка. - Если ошибка связана с нативной генерацией, проверьте фактическую конфигурацию и только затем сравнивайте полученные файлы с проектом. Не применяйте миграционные инструкции к функциям, которых в приложении нет.
- Если проблема упирается в Xcode или локальный нативный инструмент, воспроизведите тот же коммит в совместимой macOS-среде и сравните логи. Для версий Xcode используйте требования Apple, а не предположение о совпадении сред.
- Исправьте одну подтверждённую причину и повторите сборку на том же состоянии проекта. Если исправление не меняет точку сбоя, вернитесь к журналу и пересмотрите гипотезу, а не наращивайте случайные изменения.
Так можно разнести по разным веткам ошибки компиляции, подписи и выполнения приложения, а также избежать распространённой ловушки: считать локальную сборку доказательством того, что EAS получил те же файлы и настройки. Истории пользователей о похожем сбое допустимо использовать как подсказку для проверки, но не как подтверждение общего дефекта SDK 58.
Если проблема связана только с конфигурацией проекта, зависимостями или отсутствующим файлом, обычно разумнее исправить её и повторить текущую сборку EAS. Если же для диагностики требуются Xcode, нативный проект и интерактивная проверка, облачная сводка может быть неудобна: она не заменяет доступ к macOS, не позволяет так же свободно осматривать проект и затрудняет пошаговую проверку интерфейса. Для такого временного случая аренда удалённого Mac у OnceMac даёт доступ к реальной macOS-среде без покупки отдельного компьютера; это способ воспроизведения и анализа, а не автоматическое исправление EAS. Для постоянной тяжёлой нагрузки или необходимости физических интерфейсов аренда может быть не лучшим вариантом. Если требуется именно временно проверить нативную сборку, сравните доступные варианты на странице условий использования Mac, а затем повторите диагностику на том же коммите и с зафиксированными версиями инструментов.
Проверьте сборку Expo SDK 58 на выделенном Mac
Арендуйте OnceMac — отдельный физический Mac mini с macOS для проверки iOS-сборки в среде с Xcode и воспроизводимыми настройками.
