Інтеграція Firebase App Distribution в мобільний додаток
Firebase App Distribution — це не альтернатива TestFlight, це доповнення. TestFlight обмежений 90-денним терміном збірки та вимагає ревю від Apple для кожного external тестера. App Distribution розповсюджує .ipa та .apk тестерам напрямку, без магазину, за хвилини. Для команд з щоденними білдами — критично важливо.
Що зазвичай йде не так при інтеграції
Найпоширеніша помилка — пропустити крок з GoogleService-Info.plist або google-services.json. App Distribution — це Firebase-сервіс, і SDK інініціалізується через FirebaseApp.configure(). Якщо plist додане тільки до основного таргету та не включене в target membership тестового таргету — крах при старті при спробі перевірити наявність оновлень.
Другий частий сценарій: iOS-додаток збирається через ad-hoc профіль для тестування, але UDID тестера не додане до профілю — пристрій просто не встановить .ipa. App Distribution автоматично збирає UDID, але додати їх до provisioning profile — відповідальність розробника. Вирішується через fastlane match з автоматичним оновленням профілів.
Інтеграція через Fastlane
Робоча схема з fastlane:
lane :distribute_firebase do
# Збірка
build_ios_app(
scheme: "MyApp",
configuration: "Release",
export_method: "ad-hoc"
)
# Завантаження в Firebase App Distribution
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_cli_token — токен з firebase login:ci. Зберігається у CI/CD secret-змінних (GitHub Actions secrets, GitLab CI variables), не в репозиторії.
groups — групи тестерів, створені в Firebase Console. Групи дозволяють диференціювати доступ: QA-команда отримує всі білди, бета-користувачі — тільки стабільні.
Автоматичне сповіщення тестерів про оновлення
SDK App Distribution вміє показувати нативний alert при запуску, якщо доступна нова версія. Для iOS:
import FirebaseAppDistribution
// AppDelegate.application(_:didFinishLaunchingWithOptions:)
AppDistribution.appDistribution().checkForUpdate { release, error in
guard let release = release else { return }
// Показуємо alert з release.displayVersion та release.releaseNotes
let alert = UIAlertController(
title: "Доступно оновлення \(release.displayVersion)",
message: release.releaseNotes ?? "",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "Оновити", style: .default) { _ in
UIApplication.shared.open(release.downloadURL)
})
}
Важливо: checkForUpdate працює тільки для тестерів, авторизованих у Firebase. У production-збірці цього коду бути не повинно — #if DEBUG або окремий флаг збірки.
Android: аналогічна схема
FirebaseAppDistribution.getInstance().updateIfNewReleaseAvailable()
.addOnProgressListener { updateProgress ->
// Оновлюємо прогресс-бар
}
.addOnFailureListener { e ->
if (e is FirebaseAppDistributionException) {
when (e.errorCode) {
FirebaseAppDistributionException.Status.NOT_IMPLEMENTED ->
// SDK не в тестовому середовищі — production build
}
}
}
Інтеграція в CI/CD без Fastlane
Через 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
Крок додається в GitHub Actions workflow після кроку збірки. Час завантаження .ipa розміром 50 МБ — близько 90 секунд.
Термін
Інтеграція Firebase App Distribution в існуючий CI/CD (iOS + Android): 2–4 дні. Налаштування груп тестерів, автопроверки оновлень у додатку, інтеграція з Fastlane: 1–1.5 тижня. Вартість розраховується індивідуально.







