Отметим: когда команда выпускает 10+ тестовых сборок в день, ожидание App Store Review становится критическим узким местом. Firebase App Distribution решает эту проблему: .ipa и .apk доставляются напрямую тестировщикам, минуя магазинные ревью. Мы интегрируем этот сервис в ваш CI/CD, чтобы каждый коммит автоматически превращался в доступный для тестировщиков билд. Срок жизни билдов не ограничен, в отличие от 90-дневного TestFlight. За 2 минуты после коммита тестер получает свежий билд на устройство.
Какие типичные ошибки возникают при интеграции?
Первый граб: забыть добавить GoogleService-Info.plist в target membership тестового таргета. SDK инициализируется через FirebaseApp.configure(), но если plist только в основном таргете — краш на старте. Второй: на iOS .ipa не устанавливается из-за отсутствия UDID в provisioning profile. App Distribution собирает UDID, но обновлять профили — ваша задача. Автоматизируем это через fastlane match. Третий: уведомления об обновлениях не приходят. SDK должен быть инициализирован до вызова checkForUpdate, и код не должен выполняться в production. В 95% случаев эти три проблемы решаются за час.
Как мы настраиваем автоматическую доставку?
Рабочая схема с Fastlane и Firebase CLI:
lane :distribute_firebase do build_ios_app( scheme: "MyApp", configuration: "Release", export_method: "ad-hoc" ) firebase_app_distribution( app: "1:123456789:ios:abcdef", groups: "qa-team, beta-users", release_notes: last_git_commit[:message], firebase_cli_token: ENV["FIREBASE_TOKEN"] ) end Токен из firebase login:ci храним в CI/CD secrets. Группы (qa-team, beta-users) созданы в Firebase Console отдельно для iOS и Android.
Для Android используем Gradle task + firebase CLI напрямую:
firebase appdistribution:distribute app-release.apk \ --app $FIREBASE_APP_ID \ --groups "qa-team" \ --release-notes "$(git log -1 --pretty=%B)" \ --token $FIREBASE_TOKEN Время загрузки .ipa 50 МБ — около 90 секунд.
Как настроить уведомления в приложении?
SDK умеет показывать нативный alert при старте, если есть новая версия:
import FirebaseAppDistribution AppDistribution.appDistribution().checkForUpdate { release, error in guard let release = release else { return } let alert = UIAlertController( title: "Доступно обновление \(release.displayVersion)", message: release.releaseNotes ?? "", preferredStyle: .alert ) alert.addAction(UIAlertAction(title: "Обновить", style: .default) { _ in UIApplication.shared.open(release.downloadURL) }) } Важно: в production этот код отключаем с помощью #if DEBUG или флага сборки. На Android используем аналогичный подход:
FirebaseAppDistribution.getInstance().updateIfNewReleaseAvailable() .addOnProgressListener { updateProgress -> // Обновляем прогресс-бар } .addOnFailureListener { e -> if (e is FirebaseAppDistributionException) { when (e.errorCode) { FirebaseAppDistributionException.Status.NOT_IMPLEMENTED -> // SDK не в тестовой среде } } } Почему Firebase App Distribution лучше TestFlight?
Тестировщик получает обновление сразу после CI/CD-пайплайна, без ожидания ревью. App Distribution не требует загрузки в App Store Connect, что экономит до 2 часов на каждый билд. Для Android альтернатив с таким же уровнем автоматизации практически нет: TestFlight вообще не поддерживает Android, а собственные решения требуют разработки.
Сравнение: Firebase App Distribution vs TestFlight
| Критерий | Firebase App Distribution | TestFlight |
|---|---|---|
| Срок жизни билда | Бессрочно | 90 дней |
| App Store Review | Не требуется | Требуется для external |
| Работа с Android | Да | Только iOS |
| Автоматизация CI/CD | Из коробки (CLI) | Через Xcode Server или сторонние |
| Группы тестеров | По email / группам | По email + внутренние |
| Безопасность | HTTPS, Firebase Storage | HTTPS, Apple servers |
| Стоимость включена в Firebase | Бесплатно (до лимитов) | Требует Apple Developer ($99/год) |
App Distribution выигрывает в скорости и гибкости для внутренних билдов. Согласно Firebase Documentation, интеграция с CI/CD сокращает время доставки билдов на 80%.
Сравнение способов раздачи билдов: ручной vs автоматический
| Параметр | Ручная раздача | Автоматизация через App Distribution |
|---|---|---|
| Время на один билд | 15–30 минут | 2 минуты |
| Вероятность ошибки | Высокая (человеческий фактор) | Минимальная |
| Масштабируемость | Затруднена | Легко расширяется на новые группы |
| Обновление тестировщиков | Вручную по email | Push-уведомление в приложении |
Чек-лист перед запуском
- Наличие GoogleService-Info.plist в тестовом таргете
- UDID тестировщиков добавлены в provisioning profile
- FirebaseApp.configure() вызван до checkForUpdate
- SDK отключён в production (через #if DEBUG или флаг сборки)
- Группы тестеров созданы в Firebase Console
- Для Android: google-services.json включён в проект
Что входит в работу?
- Настройка Firebase Console и создание проектов для iOS/Android
- Интеграция Firebase SDK в оба приложения (включая GoogleService-Info.plist/google-services.json)
- Автоматизация сборки и загрузки через Fastlane или GitHub Actions
- Настройка уведомлений об обновлениях (SDK + custom UI)
- Создание групп тестеров и раздача доступов
- Документация по обновлению provisioning profile (iOS) и ключей подписи
Процесс работы
- Анализ — изучаем текущую CI/CD цепочку, определяем точки интеграции
- Настройка Firebase — создаем проект, подключаем приложения, генерируем ключи
- Интеграция SDK — добавляем Firebase в код, настраиваем инициализацию
- Автоматизация — пишем скрипты Fastlane/GitHub Actions для сборки и выгрузки
- Тестирование — проверяем раздачу билдов и уведомления на iOS и Android
- Запуск — обучаем команду, передаем документацию
Сроки и стоимость
Интеграция в существующий CI/CD занимает 2–4 дня. Полный цикл с настройкой уведомлений и групп — до 1.5 недель. Стоимость рассчитывается индивидуально, зависит от сложности текущего пайплайна. Оценим проект бесплатно — свяжитесь с нами.
15+ лет опыта в мобильной разработке, 50+ успешных интеграций Firebase. Гарантируем стабильную работу билдов и оперативную поддержку. Закажите интеграцию Firebase App Distribution уже сегодня.







