Отметим: когда команда выпускает 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 уже сегодня.







