Что делать, если fastlane gym не экспортирует IPA? Диагностика 2026

Руководство для разработчиков, у которых fastlane gym завершает сборку ошибкой или не создаёт пригодный IPA. Вы определите точный этап сбоя, проверите параметры экспорта и подпись, сравните локальную и удалённую среду и подтвердите назначение готового файла.

Что делать, если fastlane gym не экспортирует IPA? Диагностика 2026

Содержание

В командной строке Apple этапы создания Archive и его экспорта разделены: для них используются отдельные действия archive и -exportArchive (описание командной сборки и экспорта в документации Apple). Поэтому, если fastlane gym не экспортирует IPA, сначала определите, на каком именно этапе остановился процесс. Если Archive не создан, разбирайте выбор проекта и компиляцию; если Archive готов, но экспорт завершился ошибкой, сверяйте способ распространения, export_options и фактически доступные параметры подписи. Менять экспортную конфигурацию до подтверждения стадии сбоя — значит искать причину не там.

Этот материал для вас, если вы собираете iOS-приложение через fastlane и получаете ошибку, но не можете понять, относится ли она к Archive или экспорту.
Он также пригодится, если локальный запуск проходит, а удалённый Mac или собственный CI выдаёт другой результат.
Небольшая команда, которой нужны варианты для App Store и Ad Hoc, найдёт здесь способ проверять их раздельно.

Стадия сбоя в журнале gym

gym — прежнее название действия fastlane build_app: оно вызывает инструменты Xcode, чтобы собрать приложение и экспортировать архив согласно переданным настройкам (документация fastlane для gym и build_app). Однако сообщение о неудачном запуске lane само по себе не показывает, какой именно этап сломался. Ищите первую содержательную ошибку в выводе команды, а не последнюю строку об общем завершении.

Разделите процесс на четыре состояния:

Как отличить успешный Archive от неудачного экспорта IPA? Проверьте последовательность команд и появление архива, а затем отдельно — запуск экспорта и наличие результата. Успешный Archive подтверждает только то, что Xcode сохранил архив приложения; он не доказывает, что последующая операция экспорта создала IPA. Apple описывает распространение и подготовку приложения к выпуску как отдельную часть рабочего процесса (документация Apple о тестировании и распространении приложений).

Не принимайте статус загрузки в App Store Connect за результат gym. Экспорт IPA, его последующая загрузка и обработка платформой — разные события. Если файл уже создан, а ошибка возникла при передаче или обработке, сохраните сведения об экспорте и переходите к диагностике соответствующего этапа. Повторно менять export_options в такой ситуации обычно нечего: это не подтверждённый сбой экспорта.

Неправильный проект, Scheme или конфигурация

Когда Archive отсутствует, начните с того, что именно lane передаёт fastlane: путь к проекту или workspace, название Scheme и конфигурацию сборки. Сверьте эти значения с репозиторием и с тем приложением, которое вы намерены выпускать. В проекте могут быть похожие Scheme для демонстрационной сборки, тестов и релиза; Xcode запускает выбранную конфигурацию, а не ту, которую вы имели в виду.

В Xcode Scheme определяет, какие действия и параметры применяются для сборки, тестирования и архивирования. Поэтому проверяйте настройки Scheme вместе с фактическим вызовом из lane, а не только выбор, который виден в интерфейсе Xcode (руководство Apple по настройке Build Scheme). В частности, убедитесь, что архивируется нужная схема приложения, а не схема тестовой цели или другого продукта.

Нужно ли менять export_options, если Archive не собирается? Нет, пока журнал не подтверждает, что ошибка появилась после успешного архивирования. Сначала установите, какая команда выполнялась и где появилась первая ошибка. Если сбой произошёл во время разрешения зависимостей или компиляции, экспортные параметры к нему не относятся.

Проверьте в обезличенном логе:

Для проверки можно воспроизвести вызов xcodebuild, который приводит fastlane в журнале, не меняя одновременно несколько параметров. Удалите из копии лога токены, пароли, закрытые ключи и личные данные. Сопоставляйте полученную ошибку с исходным контекстом: вырезанная строка без команды и предыдущих сообщений может скрыть причину, например неправильный путь или Scheme.

Метод распространения и параметры экспорта

После подтверждения готового Archive зафиксируйте назначение IPA. Для тестирования через TestFlight или распространения через App Store нужен соответствующий сценарий выпуска; для установки на заранее определённые устройства — Ad Hoc. Эти цели нельзя считать взаимозаменяемыми: они влияют на экспорт и требования к подписи. Apple отдельно описывает варианты распространения приложения и их назначение (руководство Apple по бета-тестированию и выпуску).

export_method и export_options нужно оценивать как связанные, но не одинаковые настройки. Первый задаёт fastlane ожидаемый способ распространения; второй передаёт параметры экспорта в формате, который использует Xcode. В документации fastlane описаны настройки gym, включая метод экспорта и передачу параметров через export_options (параметры gym). Поддерживаемые значения и поведение зависят от используемой версии Xcode и fastlane, поэтому не переносите значение из старого примера, не сверив его с документацией для текущего инструментария.

Как проверить export_method и export_options в fastlane gym? Сначала запишите цель конкретной сборки, затем сравните с ней метод экспорта, значения plist и фактический процесс подписи проекта. Например, профиль Ad Hoc должен соответствовать требованиям этого типа распространения; Apple указывает, что при создании такого профиля выбираются зарегистрированные устройства (требования Apple к профилю Ad Hoc). Если один и тот же lane должен выпускать разные варианты IPA, проверьте, что для каждого запуска передаётся согласованный набор параметров.

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

Несовпадение подписи и Provisioning Profile

Когда ошибка возникает именно при экспорте, проверьте, какой bundle identifier включён в приложение, какой профиль выбран и какие настройки подписи использует проект. Неверный профиль или несоответствие его назначения сценарию распространения может сделать экспорт невозможным, даже если Archive уже существует.

Разделяйте автоматическое и ручное управление подписью. При автоматическом подходе часть выбора и управления выполняет Xcode; при ручном — вы должны предоставить согласованные сертификаты и профили. Переключение между ними без проверки настроек проекта способно усложнить диагностику: один этап может ожидать автоматическую настройку, тогда как lane явно передаёт сведения для ручной подписи. Документация fastlane по настройке подписи проекта описывает, как параметры подписи связаны с настройками Xcode (руководство fastlane по подписи Xcode-проекта).

Действуйте последовательно:

Если сообщение указывает на отсутствие сертификата, неверный профиль или несовпадающую подпись, сверяйте точную ошибку с руководством fastlane по диагностике кодовой подписи (разбор типичных проблем подписи в fastlane). Если причина на самом деле в получении материалов из частного хранилища или доступе к учётным данным, это уже отдельная ветка: для неё предназначена документация fastlane match (описание fastlane match). Не смешивайте эту неисправность с настройкой экспорта IPA.

Различия локальной и удалённой среды

Если одна и та же сборка локально экспортирует IPA, а на удалённом Mac — нет, это ещё не доказывает, что причина в производительности компьютера. Проверьте, одинаковы ли фактические версии Xcode и fastlane, какой путь к инструментам командной строки использует процесс, из какого каталога запускается lane и доступны ли нужные файлы подписи. Часто различается не код, а условия выполнения.

Почему сборка проходит локально, но не на удалённом Mac? Сравните две среды по наблюдаемым параметрам, а не по предположению о том, что один компьютер «слабее». Запишите версии и пути из каждой среды, рабочий каталог, переданные аргументы, доступность проекта и подписи. Затем повторите запуск, меняя только выявленное различие. Так вы отделите проблему окружения от ошибки проекта или неподходящего export_options.

Для сопоставления создайте короткую карточку запуска:

Проверяйте эти сведения до запуска и после него, чтобы не перепутать различия в настройке с результатом предыдущей сборки. Убедитесь, что удалённый процесс читает тот же файл параметров, который вы проверяли локально; относительный путь может разрешаться относительно другого каталога. Также проверьте, не остался ли в каталоге старый Archive или IPA: иначе наличие файла может создать ложное впечатление, что текущий запуск завершился успешно.

Если вам нужно воспроизвести сборку в отдельной macOS-среде, заранее оцените не только доступность Mac, но и возможность проверить версии инструментов, рабочий каталог и материалы подписи. Описание доступных вариантов удалённого Mac можно посмотреть на странице узлов VPSMAC; сам факт использования удалённого компьютера не исправляет ошибочную Scheme, профиль или метод экспорта.

Проверка IPA и критерии остановки

Успешное завершение команды — не единственная проверка. Убедитесь, что в ожидаемом каталоге появился новый IPA от текущего запуска, а не файл, оставшийся после предыдущей попытки. Если lane задаёт собственный каталог вывода, проверяйте именно его; не полагайтесь на случайный результат поиска по всей рабочей директории.

Затем установите, соответствует ли экспорт назначению сборки. Проверьте идентификатор приложения и сведения о подписи доступными вам средствами анализа IPA и сопоставьте их с ожидаемым вариантом распространения. Для Ad Hoc сверяйте результат с предназначенным для выбранных устройств профилем; для сборки, предназначенной для тестирования или выпуска, проверяйте соответствие целевому процессу распространения. Требования Apple к профилям и процедурам распространения зависят от выбранного сценария, поэтому один успешный экспорт не подтверждает пригодность IPA для любой цели.

Как понять, что gym создал IPA с правильной подписью и способом распространения? Подтвердите одновременно три факта: текущий запуск создал ожидаемый файл, приложение внутри имеет правильный идентификатор, а подпись и профиль подходят заявленной цели. Затем отдельно проверяйте загрузку и обработку на платформе распространения. Если экспорт и локальная проверка прошли, но загрузка отклонена, исследуйте её сообщение отдельно, не называя это автоматически ошибкой gym.

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

Останавливайте диагностику экспорта, когда журнал подтверждает успешное создание IPA, а проверка файла показывает ожидаемое приложение и подпись. Дальнейший отказ при загрузке или обработке требует отдельного разбора. Если же IPA отсутствует, подпись не соответствует назначению или запуск читает не те параметры, проблема ещё не закрыта.

Когда локальная машина не даёт воспроизводить удалённый сбой в одинаковых условиях, аренда Mac может быть способом получить отдельную macOS-среду для проверки, но не способом автоматически починить fastlane. Сначала оцените собственный Mac, CI и временное удалённое окружение по тому, насколько точно вы можете контролировать версии Xcode, доступ к подписи и сохранение журналов. Если у вашего текущего решения нет постоянной доступности, воспроизводимого набора инструментов или удобного доступа к сборочной машине, удалённый Mac может упростить именно повторение и проверку сборки. Посмотрите варианты VPSMAC на странице удалённых Mac, если вам нужна среда для диагностики или временного запуска; для проекта с постоянной нагрузкой либо требованием к физическим интерфейсам сначала сравните аренду с собственным оборудованием.