Зауважимо: коли команда випускає 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 вже сьогодні.







