TestFlight — это официальный сервис Apple для бета-тестирования iOS, iPadOS, watchOS и tvOS приложений. Через TestFlight разработчики распространяют предрелизные сборки среди до 10 000 внешних тестировщиков, собирают отзывы и crash-reports без необходимости публикации в App Store. По данным Apple Developer Documentation, 2025, более 80% приложений в App Store используют TestFlight на этапе подготовки релиза.
Главное
TestFlight — это легитимный и единственный официальный способ распространения iOS-приложений для тестирования без публикации в App Store. Сервис был запущен Apple в 2014 году после приобретения одноимённой компании. До появления TestFlight разработчики использовали Ad Hoc дистрибуцию с ограничением 100 устройств на сезон — TestFlight снял это ограничение и упростил процесс до нескольких кликов.
iOS имеет строгую политику безопасности: приложение может быть установлено на устройство только через App Store или с использованием специальных сертификатов. TestFlight решает проблему бета-тестирования, выступая прокси между разработчиком и тестировщиком: Apple проверяет билд на базовые требования, после чего тестировщики получают приложение через приложение TestFlight из App Store, что не требует доверия к неподписанным файлам.
Существует три способа распространения iOS-приложений вне App Store: Ad Hoc (ограничение 100 устройств, требует UDID каждого устройства), Enterprise (внутрикорпоративное распространение без лимита, требует Enterprise-сертификата Apple за $299/год) и TestFlight (до 10 000 тестировщиков, бесплатно, не требует сбора UDID). TestFlight — оптимальный выбор для бета-тестирования, Ad Hoc подходит для девайс-специфичных тестов, Enterprise — для корпоративных приложений.
Процесс публикации билда через TestFlight состоит из пяти шагов: сборка в Xcode, загрузка в App Store Connect через Archive Organizer, обработка Apple, приглашение тестировщиков, установка приложения через TestFlight app. Каждый шаг занимает от нескольких минут до часа в зависимости от сложности проекта.
Билд должен быть собран с distribution-сертификатом и корректным provisioning profile. Apple проверяет: валидность сертификата, соответствие bundle identifier, отсутствие приватных API, корректность иконок (1024×1024) и наличие App Store icon. Если билд не проходит проверку — TestFlight показывает ошибку с описанием проблемы.
После загрузки билд проходит через автоматизированную проверку Apple: статический анализ бинарного кода, проверка цифровой подписи, сканирование на использование приватных API и malware. Processing занимает от 15 минут до 2 часов для первого билда и обычно 15–30 минут для последующих. Статус обработки отображается в Activity в App Store Connect.
// Настройка TestFlight в Swift AppDelegate
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// Проверка: установлено ли приложение через TestFlight
if Bundle.main.appStoreReceiptURL?.lastPathComponent
== "sandboxReceipt" {
print("Beta version via TestFlight")
}
return true
}
}
TestFlight разделяет тестировщиков на две группы: внутренние (Internal Testers) и внешние (External Testers). Разница — в количестве участников, доступе к билдам и необходимости ревью от Apple. Правильный выбор группы ускоряет процесс тестирования и соблюдает политики App Store.
До 100 участников из состава команды Apple Developer Program. Для приглашения внутреннего тестировщика достаточно добавить его Apple ID в App Store Connect — он сразу получает доступ ко всем билдам. Не требуется ревью Apple. Идеально для ежедневного smoke-тестирования и проверки фич на ранних стадиях.
До 10 000 участников, не входящих в команду разработки. Первый билд для внешних тестировщиков проходит базовое ревью Apple (обычно 1–2 дня). Последующие билды с изменениями, не затрагивающими ключевую функциональность, могут проходить без повторного ревью. Внешние тестировщики приглашаются через email или публичную ссылку.
| Параметр | Internal Testers | External Testers |
|---|---|---|
| Макс. количество | 100 | 10 000 |
| Ревью Apple | Не требуется | Первый билд — обязательно |
| Приглашение | Apple ID из команды | Email / публичная ссылка |
| Срок действия билда | 90 дней | 90 дней |
| Доступ к билдам | Ко всем сразу | Только активные группы |
Загрузка билда в TestFlight выполняется через Xcode, Application Loader или командную строку с помощью xcrun. Наиболее распространённый способ — через Xcode Archive Organizer после создания архива проекта. Альтернативный способ — автоматизация через Fastlane для CI/CD Pipeline.
Соберите архив (Product → Archive), откройте Organizer, выберите архив и нажмите Distribute App. Выберите TestFlight как метод распространения, укажите сертификат и provisioning profile. Xcode загрузит билд в App Store Connect, где он появится после обработки. Весь процесс занимает 10–20 минут для первой загрузки.
Fastlane — самый популярный инструмент для автоматизации загрузки билдов в TestFlight. Команда fastlane pilot загружает билд и управляет тестировщиками без открытия Xcode. Интеграция Fastlane с CI/CD сервером позволяет публиковать билды в TestFlight автоматически после прохождения всех тестов.
# Fastfile — загрузка билда в TestFlight
default_platform(:ios)
lane :beta do
# Получение сертификатов через match
match(type: "appstore")
# Сборка и подписание
build_app(
scheme: "MyApp",
export_method: "app-store",
workspace: "MyApp.xcworkspace"
)
# Загрузка в TestFlight
pilot(
skip_waiting_for_build: true,
distribute_external: false,
notify_external_testers: false
)
end
Fastlane pilot автоматически загружает IPA в App Store Connect, ожидает обработки (если skip_waiting_for_build = false) и назначает билд выбранным группам тестировщиков. Команда distribute_external: true немедленно отправляет билд внешним тестировщикам после обработки.
Без Fastlane можно использовать xcrun: xcrun altool --upload-app --file path/to/app.ipa --username YOUR_APPLE_ID --password @keychain:AC_PASSWORD. altool поддерживается Apple для CI-сред и не требует графического интерфейса. Пароль передаётся через keychain или app-specific password — не используйте plain-text пароли.
TestFlight предоставляет несколько механизмов обратной связи: встроенная форма отзыва, автоматический сбор crash-логов, метрики использования и скриншоты. Команда получает все данные в App Store Connect без необходимости внедрять сторонние SDK для бета-тестирования.
Тестировщик открывает приложение TestFlight, выбирает ваш билд и нажимает Send Feedback. Форма позволяет отправить текстовый отзыв, прикрепить скриншот и указать severity. Все отзывы собираются в App Store Connect в разделе TestFlight → Feedback. Разработчик может ответить на отзыв, и тестировщик получит уведомление в TestFlight app.
При падении приложения TestFlight автоматически собирает crash-report: стек вызовов, версию ОС, модель устройства и время падения. Crash-логи доступны в Xcode Organizer (Crashes) и App Store Connect (TestFlight → Crashes). Для получения symbolicated crash-логов необходимо загрузить dSYM-файлы вместе с билдом или отдельно через Xcode.
TestFlight показывает метрики: количество установок, активных тестировщиков, сессий и крашей. Analytics обновляются ежедневно и помогают оценить вовлечённость тестировщиков. Если за неделю ни один тестировщик не открыл приложение — стоит пересмотреть коммуникацию с группой или качество билда.
TestFlight является неотъемлемой частью процесса публикации в App Store. Тот же билд, который прошёл бета-тестирование через TestFlight, может быть отправлен на ревью Apple без пересборки — достаточно нажать кнопку в App Store Connect. Это исключает риск того, что продакшн-билд отличается от протестированного.
В App Store Connect выберите билд, который прошёл тестирование, и нажмите Submit for Review. Apple использует тот же билд из TestFlight — повторная загрузка не требуется. Время ревью обычно составляет 1–3 дня. Если билд отклонён — исправьте замечания, загрузите новый билд в TestFlight и повторите процесс.
Рекомендуется после финального раунда тестирования в TestFlight подождать 24–48 часов перед отправкой на ревью. Это время позволяет тестировщикам обнаружить критические баги, которые могут пройти автоматические тесты. Release candidate (RC) билд в TestFlight — стандарт практики зрелых iOS-команд.
TestFlight билды автоматически становятся недоступными для новых установок после выхода релизной версии в App Store. Тестировщики, уже установившие бета-версию, могут продолжать её использовать в течение 30 дней после публикации релиза, после чего приложение перестаёт открываться. Убедитесь, что тестировщики обновились до App Store версии.
Часто задаваемые вопросы
TestFlight полностью бесплатен для участников Apple Developer Program ($99/год). За использование сервиса не взимается дополнительная плата, независимо от количества билдов и тестировщиков. Платите только за подписку разработчика Apple — TestFlight включён в неё по умолчанию.
Нет, TestFlight — эксклюзивный сервис экосистемы Apple. Для Android существует аналогичный инструмент Google Play Console — Internal Testing и Open Testing треки. Для публикации бета-версий на Android также используются Firebase App Distribution и DeployGate.
Обработка занимает от 15 минут до 2 часов для первого билда после загрузки. Последующие билды обрабатываются быстрее — обычно 15–30 минут. Время обработки зависит от загрузки серверов Apple. Статус можно отслеживать в App Store Connect в разделе Activity.
Каждый билд доступен для тестирования 90 дней с момента загрузки. Количество билдов не ограничено, но активными могут быть не более 30 билдов одновременно. Старые билды автоматически удаляются по истечении срока действия или при достижении лимита.
Для участия в тестировании через TestFlight требуется Apple ID. Внешние тестировщики приглашаются через email-ссылку — при первом открытии ссылки система предложит создать Apple ID, если его ещё нет. Публичная ссылка также доступна для распространения в соцсетях или блоге.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также