Pilot (Fastlane) — это инструмент для управления сборками iOS-приложений в TestFlight: загрузка бинарных файлов, управление группами тестировщиков и отслеживание статусов билдов. В отличие от ручной загрузки через App Store Connect, Pilot автоматизирует все операции с TestFlight API. По данным официальной документации Fastlane (2026), Pilot позволяет командам сократить время публикации бета-версии с 10 минут до нескольких секунд.
Главное
Pilot (Fastlane) — это компонент экосистемы Fastlane для автоматизации работы с TestFlight — платформой Apple для бета-тестирования мобильных приложений. Pilot берёт на себя все рутинные операции: загрузку билдов, добавление тестировщиков, управление группами и отслеживание статуса сборок.
Без Pilot процесс распространения бета-версии выглядит так: разработчик вручную открывает App Store Connect, выбирает приложение, загружает IPA через Xcode Organizer, настраивает группу тестировщиков и отправляет приглашения. TestFlight — это сервис Apple для распространения бета-версий приложений среди тестировщиков до официального релиза в App Store.
По данным App Store Connect Help (2025), внешние тестировщики должны пройти процесс Beta App Review перед первой установкой сборки — это занимает от 1 до 48 часов. Pilot автоматически отслеживает статус ревью и уведомляет команду о готовности сборки к распространению среди внешних групп тестировщиков.
Используйте Pilot в любом проекте, где требуется регулярная доставка бета-сборок тестировщикам — это стандартный инструмент для CI/CD пайплайнов iOS-приложений, обеспечивающий предсказуемый процесс поставки.
Функционал Pilot охватывает полный жизненный цикл управления бета-сборками: от загрузки бинарного файла до оповещения тестировщиков о новой версии. Каждая функция реализована в виде отдельной команды с предсказуемым поведением и детальным логированием каждого шага.
Команда fastlane pilot upload загружает IPA-файл в App Store Connect и создаёт новую сборку в TestFlight. Pilot автоматически проверяет валидность бинарного файла, соответствие версии и идентификатора приложения. App Store Connect — это платформа Apple для управления приложениями, включая загрузку билдов, метаданные, аналитику и отчёты о продажах.
После загрузки Pilot ожидает обработки бинарного файла на стороне Apple — процесс занимает от 5 до 30 минут в зависимости от размера сборки. Во время ожидания Pilot выводит прогресс-бар с информацией о текущем статусе обработки: Processing, Validating или Ready. При успешной обработке сборка становится доступной для назначения группам тестировщиков.
Pilot поддерживает управление как внутренними, так и внешними группами тестировщиков. Внутренние тестировщики — это участники вашей команды Apple Developer, которые получают доступ к сборкам мгновенно, без прохождения Beta App Review. Внешние тестировщики — это пользователи, приглашённые через email, которым требуется одобрение ревью перед первой установкой.
Команда fastlane pilot add добавляет новых тестировщиков в группу по email или Apple ID. Pilot автоматически отправляет приглашения и проверяет, принял ли тестировщик инвайт. Для массового добавления можно передать список email из файла через параметр --testers_file_path, что удобно при первичном наборе группы тестировщиков из сотен участников.
# Загрузка новой сборки в TestFlight
fastlane pilot upload --ipa "build/MyApp.ipa"
# Добавление тестировщика в группу
fastlane pilot add --email "tester@company.com" \
--groups "QA Team"
Конфигурация Pilot не требует отдельного конфигурационного файла — настройки передаются через Appfile (общий файл Fastlane) или аргументы командной строки. Основные параметры включают apple_id приложения, app_identifier, team_id и учётные данные для доступа к App Store Connect API.
Для аутентификации Pilot использует App Store Connect API Key (рекомендуемый способ) или двухфакторную аутентификацию Apple ID. App Store Connect API Key — это ключ доступа, который генерируется в App Store Connect и позволяет взаимодействовать с API без интерактивного ввода пароля и кода подтверждения.
# Appfile — общая конфигурация Fastlane
app_identifier("com.company.app")
apple_id("developer@company.com")
team_id("TEAM123456")
# Переменные окружения для Pilot
# APP_STORE_CONNECT_API_KEY_PATH=/path/to/key.p8
Параметр app_identifier определяет Bundle Identifier приложения, который должен совпадать с идентификатором, указанным в Xcode проекте и App Store Connect. Параметр apple_id используется для аутентификации при двухфакторной схеме, а team_id — для выбора команды разработки, если аккаунт привязан к нескольким командам Apple Developer.
Для работы Pilot необходимо настроить App Store Connect API Key в CI/CD окружении. Ключ генерируется в App Store Connect → Users and Access → Keys → Generate API Key. Сохраните файл .p8 в секретах CI-системы и укажите путь к нему через переменную окружения APP_STORE_CONNECT_API_KEY_PATH или параметр --api_key_path в командах Pilot.
Набор команд Pilot покрывает все сценарии работы с TestFlight: загрузка сборок, управление тестировщиками, просмотр статусов и отслеживание метаданных. Каждая команда возвращает структурированный JSON-вывод для дальнейшей обработки в CI/CD скриптах.
Команда fastlane pilot builds выводит список всех сборок приложения с указанием версии, статуса обработки и даты загрузки. Статус сборки может быть одним из: Processing — Apple обрабатывает бинарный файл, Ready — сборка доступна для распространения, Rejected — сборка отклонена из-за ошибок валидации.
# Просмотр списка всех сборок в TestFlight
fastlane pilot builds
# Назначение сборки группе тестировщиков
fastlane pilot distribute --build_number 42 \
--groups "QA Team" --notify
# Просмотр информации о конкретной сборке
fastlane pilot build_info --build_number 42
Команда fastlane pilot distribute назначает сборку указанным группам тестировщиков и отправляет уведомления. Параметр --notify включает отправку email-уведомлений тестировщикам о новой доступной сборке — это критично для вовлечения бета-тестеров в процесс тестирования и ускорения обратной связи.
Для управления метаданными сборки используется параметр --changelog, который задаёт текст описания изменений в новой версии. Этот текст отображается тестировщикам в приглашении на тестирование в приложении TestFlight. Рекомендуется указывать ключевые изменения, исправленные баги и новые функции в каждой сборке.
| Команда Pilot | Назначение | Ключевые параметры |
|---|---|---|
| pilot upload | Загрузка IPA в TestFlight | --ipa, --skip_waiting |
| pilot distribute | Назначение сборки группам | --build_number, --groups |
| pilot add | Добавление тестировщиков | --email, --groups |
| pilot builds | Список всех сборок | --app_identifier |
| pilot build_info | Информация о сборке | --build_number |
Pilot в CI/CD — это финальный этап пайплайна доставки iOS-приложения. После того как Gym собрал IPA, а тесты пройдены, Pilot загружает сборку в TestFlight и распределяет её по группам тестировщиков. Это позволяет командам QA получать новую версию приложения через несколько минут после коммита в репозиторий.
Типичный пайплайн iOS CI/CD включает последовательность: Match (сертификаты), Gym (сборка IPA), Pilot (загрузка в TestFlight и распределение). Каждый этап зависит от предыдущего, что гарантирует доставку только валидных и подписанных сборок тестировщикам.
# Полный пайплайн в Fastfile
lane :beta do
match(type: :appstore)
gym(scheme: "MyApp", export_method: "app-store")
pilot("build/MyApp.ipa", groups: ["QA", "PM"])
end
Параметр skip_waiting в команде upload позволяет не ожидать завершения обработки бинарного файла Apple в рамках CI-задачи — Pilot отправляет запрос на загрузку, получает идентификатор сборки и завершает работу. Это ускоряет пайплайн, так как обработка может занимать до 30 минут, которые не тратятся на ожидание в CI-раннере.
Для корректной работы Pilot в CI необходимо настроить API-ключ App Store Connect. Сохраните файл ключа .p8 в защищённом хранилище CI-системы и передавайте путь через переменную окружения APP_STORE_CONNECT_API_KEY_PATH. Pilot использует этот ключ для аутентификации в API без двухфакторной аутентификации, что критично для автоматических сценариев.
При использовании Pilot разработчики чаще всего сталкиваются с ошибками аутентификации, неверной конфигурацией приложения и проблемами с обработкой бинарных файлов на стороне Apple. Диагностика проблем Pilot начинается с проверки статуса сборки в App Store Connect через команду pilot builds.
Ошибка «Your app is not available for testing in TestFlight» возникает, когда приложение не настроено для тестирования в App Store Connect. Решение: откройте раздел TestFlight в App Store Connect, активируйте тестирование для приложения и убедитесь, что Export Compliance заполнен корректно для вашего типа шифрования.
Ошибка «Missing iOS Distribution signing identity» указывает на отсутствие Distribution-сертификата в Keychain. Решение: запустите Match для загрузки правильного сертификата перед вызовом Pilot. Distribution-сертификат отличается от Development — он используется для подписи сборок, предназначенных для распространения через TestFlight или App Store.
При ошибке «Invalid Provisioning Profile» сборка содержит неверный профиль для выбранного метода экспорта. Решение: проверьте, что Gym использует правильный export_method, соответствующий типу профиля в Match. Если сборка собиралась с development-профилем, Pilot не сможет загрузить её в TestFlight — требуется app-store или ad-hoc профиль.
Часто задаваемые вопросы
Pilot поддерживает два типа: внутренние тестировщики (Internal Testers) — участники команды Apple Developer, получающие доступ мгновенно, и внешние тестировщики (External Testers) — пользователи, приглашённые по email, которым требуется прохождение Beta App Review перед установкой.
TestFlight требует уникальный номер сборки для каждой загрузки. Pilot автоматически проверяет дубликаты и отклоняет загрузку сборки с номером, который уже существует в App Store Connect. Для новой загрузки увеличьте build number в Xcode проекте перед сборкой.
Нет, Pilot является компонентом Fastlane и не устанавливается отдельно. Однако вы можете вызывать только Pilot без других инструментов Fastlane. Для этого установите Fastlane через gem install fastlane и используйте только команды pilot, игнорируя match и gym.
Используйте команду fastlane pilot reject с указанием номера сборки. Pilot отключает доступ тестировщиков к указанной сборке, но не удаляет её из App Store Connect. Отклонённая сборка остаётся в истории TestFlight со статусом Rejected для аудита релизов.
Используйте параметр --notify в команде pilot distribute. Pilot отправляет email-уведомления всем тестировщикам в указанных группах с ссылкой на установку новой версии через TestFlight. Без этого флага тестировщики увидят новую сборку только при открытии приложения TestFlight.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также