Gym (Fastlane) — это инструмент для сборки и подписи iOS-приложений в формат IPA через командную строку. В отличие от Xcode, который требует ручного выбора схемы и профиля, Gym автоматизирует весь процесс экспорта и упаковки приложения. По данным официальной документации Fastlane (2026), Gym сокращает время сборки на 30% за счёт оптимизации параметров xcodebuild и параллельной обработки ресурсов.
Главное
Gym (Fastlane) — это компонент экосистемы Fastlane, который обеспечивает сборку iOS-приложений в формат IPA через единую команду терминала. Он абстрагирует сложный процесс вызова xcodebuild с десятками флагов и предоставляет разработчику простой интерфейс с разумными значениями по умолчанию.
В Xcode для сборки IPA требуется открыть проект, выбрать схему, настроить Archive и Export, указать метод распространения и дождаться завершения. Автоматизация сборки через Gym устраняет ручные шаги и гарантирует, что каждая сборка выполняется с одинаковыми параметрами — это критично для предсказуемости CI/CD пайплайна.
По данным SwiftLee (2024), команды, использующие Gym для сборки, тратят на 40% меньше времени на настройку релизного процесса по сравнению с ручным экспортом через Xcode Organizer. Gym также генерирует детальные логи сборки с указанием каждого шага xcodebuild, что упрощает отладку неудачных билдов и анализ ошибок компиляции.
Используйте Gym в любом iOS-проекте, который требует регулярной сборки IPA для тестирования или публикации — это единственный способ гарантировать идентичную конфигурацию сборки на всех машинах в команде.
Сборка IPA через Gym состоит из трёх последовательных этапов: архивация проекта через xcodebuild, экспорт архива в бинарный пакет и упаковка в формат IPA с подписью. Gym автоматически определяет тип проекта (single target или workspace) и выбирает корректный метод сборки.
На этапе архивации Gym запускает xcodebuild archive с параметрами схемы и конфигурации, указанными в проекте. После успешного создания архива .xcarchive Gym запускает xcodebuild -exportArchive с выбранным методом экспорта. Экспорт IPA — это процесс преобразования архива .xcarchive в установочный файл .ipa с включением всех необходимых ресурсов и подписей.
Метод экспорта определяет тип Provisioning Profile, который будет использован для подписи IPA. Gym поддерживает четыре метода: development для отладки на устройствах разработчиков, app-store для публикации в App Store, ad-hoc для бета-тестирования на ограниченном числе устройств и enterprise для корпоративного распространения.
Дополнительные параметры включают указание export_options_plist для точной настройки экспорта, suppression ofSwift overlay для уменьшения размера IPA и управление биткодом. Gym также поддерживает сборку для симулятора через флаг --skip_package_ipa, что полезно для быстрой проверки кода без полного экспорта.
# Базовая сборка IPA через Gym
fastlane gym --workspace "MyApp.xcworkspace" --scheme "MyApp"
# Сборка с указанием метода экспорта
fastlane gym --export_method app-store
# Сборка только архива без экспорта IPA
fastlane gym --skip_package_ipa
Gymfile — это конфигурационный файл Fastlane, который хранит все параметры сборки в структурированном Ruby-формате. В отличие от передачи флагов через командную строку, Gymfile позволяет зафиксировать конфигурацию в репозитории и гарантировать, что все разработчики и CI используют идентичные настройки сборки.
# Gymfile — конфигурация сборки
workspace("MyApp.xcworkspace")
scheme("MyApp")
export_method(:app-store)
configuration("Release")
output_directory("./build")
output_name("MyApp.ipa")
include_symbols(true)
include_bitcode(false)
Параметр export_method в Gymfile соответствует типам профилей из Apple Developer Portal. Для App Store релизов используется :app-store, для тестирования — :development или :ad-hoc. Параметр configuration определяет конфигурацию сборки: Release для релизов или Debug для отладочных версий.
Параметр include_bitcode управляет включением биткода в IPA. Apple требовала биткод для приложений watchOS и tvOS, но для iOS этот параметр можно отключить для уменьшения размера бинарного файла. include_symbols включает файлы символьной отладки .dSYM, которые необходимы для символизации crash-логов из App Store Connect или сторонних сервисов мониторинга.
Дополнительные параметры Gymfile включают export_options_plist для кастомного plist-файла экспорта, silent для подавления лишнего вывода в логах и build_path для указания временной директории сборки. Эти параметры полезны при интеграции Gym в сложные CI/CD пайплайны с особыми требованиями к артефактам.
Интерфейс команд Gym включает базовые параметры для типовых сценариев сборки и расширенные флаги для точной настройки поведения. Большинство параметров можно передать как через командную строку, так и через Gymfile, причём аргументы командной строки имеют приоритет над файлом конфигурации.
Команда fastlane gym без параметров использует настройки из Gymfile или автоматически определяет проект в текущей директории. Для проектов с несколькими таргетами нужно указывать --scheme и --workspace для корректного выбора целевой конфигурации сборки.
Для быстрой отладочной сборки используется fastlane gym --export_method development — она собирает IPA с Development-профилем для установки на устройства разработчиков. Сборка IPA для App Store требует флага --export_method app-store и использования Distribution-сертификата, который должен быть предварительно настроен в Match или Keychain.
# Сборка для App Store с кастомным именем
fastlane gym --export_method app-store --output_name "Release_1.0.ipa"
# Сборка с очисткой перед архивацией
fastlane gym --clean --configuration Debug
# Сборка для симулятора без IPA
fastlane gym --skip_package_ipa --destination "generic/platform=iOS Simulator"
Флаг --clean удаляет временные файлы предыдущей сборки перед запуском, что предотвращает использование устаревшего кэша и гарантирует чистый билд. Флаг --destination позволяет указать целевую платформу для сборки: iOS Simulator, iOS Device или macOS Catalyst.
| Параметр Gym | Назначение | Пример значения |
|---|---|---|
| --scheme | Выбор Xcode схемы для сборки | MyApp |
| --export_method | Метод экспорта профиля | app-store, ad-hoc |
| --configuration | Конфигурация сборки | Release, Debug |
| --clean | Очистка перед сборкой | флаг |
| --output_name | Имя выходного IPA файла | App_1.0.ipa |
Интеграция Gym с CI/CD — стандартная практика для команд iOS-разработчиков, стремящихся к непрерывной поставке. Gym запускается в пайплайнах GitHub Actions, GitLab CI, Bitrise или Jenkins после этапа тестирования и перед отправкой в TestFlight или App Store.
Типичный пайплайн iOS CI/CD включает: клонирование репозитория, установку зависимостей через CocoaPods или SPM, настройку сертификатов через Match, сборку IPA через Gym и загрузку через Pilot или Deliver. GitLab CI — это система непрерывной интеграции от GitLab, которая позволяет запускать сборки при каждом пуше в репозиторий.
# Пример шага сборки в GitLab CI
fastlane gym --scheme "MyApp" \
--export_method app-store \
--output_directory "$CI_PROJECT_DIR/build"
# Сохранение IPA как артефакта сборки
cp "build/MyApp.ipa" "$CI_PROJECT_DIR/artifacts/"
Для корректной работы Gym в CI необходимо настроить xcodebuild доступ к Keychain с сертификатами. Это делается через команду security unlock-keychain перед запуском Gym. Если используется Match, сертификаты устанавливаются автоматически, и отдельная настройка Keychain не требуется — Match сам создаёт временную связку ключей для сборки.
После успешной сборки IPA может быть передан в следующие шаги пайплайна: загрузка в TestFlight через Pilot или отправка в App Store Connect через Deliver. Настройте переменные окружения CI-системы для хранения учётных данных Apple Developer, включая FASTLANE_APPLE_API_KEY и MATCH_PASSWORD, чтобы все этапы пайплайна работали без интерактивного ввода.
При использовании Gym разработчики часто сталкиваются с ошибками, связанными с неверной конфигурацией xcodebuild, отсутствием сертификатов или несовместимостью версий Xcode. Диагностика ошибок Gym начинается с анализа полного лога сборки, который выводится в консоль после завершения каждой команды.
Ошибка «error: No matching provisioning profiles found» указывает на отсутствие подходящего Provisioning Profile для выбранного метода экспорта. Решение: убедитесь, что Match или Keychain содержит корректный профиль для указанного export_method. Provisioning Profile должен соответствовать идентификатору приложения и типу сертификата (Development или Distribution) для успешной подписи IPA.
Ошибка «error: Signing for requires a development team» возникает, когда в проекте не указана команда разработки. Решение: добавьте DEVELOPMENT_TEAM в конфигурацию сборки проекта или укажите team_id в Gymfile через параметр export_team_id. Это особенно актуально для проектов, работающих с несколькими Apple Developer аккаунтами.
При ошибке «error: Multiple commands produce...» происходит конфликт выходных файлов между разными target в workspace. Решение: настройте уникальные пути вывода для каждого target в Build Settings проекта Xcode или используйте новый build system, который включён по умолчанию в Xcode 14 и новее. Gym поддерживает оба варианта через флаг --use_legacy_build_system.
Часто задаваемые вопросы
Gym автоматизирует процесс xcodebuild и устраняет ручные шаги Archive и Export. В отличие от Xcode, Gym гарантирует идентичные параметры сборки на всех машинах, генерирует детальные логи и интегрируется в CI/CD пайплайны без необходимости открывать графический интерфейс.
Gym поддерживает четыре метода: development для отладки, app-store для публикации, ad-hoc для бета-тестирования на ограниченном числе устройств и enterprise для корпоративного распространения In-House. Метод задаётся через параметр --export_method или export_method в Gymfile.
Для уменьшения размера IPA используйте --export_options_plist с параметром thinning для генерации универсального бинарника, отключите биткод через include_bitcode(false) и настройте stripping символов через параметр --include_symbols false, если crash-логи не нужны.
Ошибка Code Signing в CI обычно вызвана отсутствием сертификатов в Keychain. Решение: настройте Match для автоматической установки сертификатов или добавьте команду security unlock-keychain перед запуском Gym. Убедитесь, что переменная MATCH_PASSWORD передана в окружение CI.
Да, Gym поддерживает сборку macOS, tvOS и watchOS приложений, не только iOS. Для macOS укажите платформу через параметр --platform macos или настройте соответствующую схему в Xcode. Gym автоматически выберет правильный формат архива для целевой платформы.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также