Зауважте: коли додаток вилітає на iOS або Android, а у вас немає краш-репортингу — ви витрачаєте години на відтворення. Типовий сценарій: користувач скаржиться, що додаток закривається на екрані оплати, але локально ви не можете повторити. Firebase Crashlytics дає повний стектрейс із символами без ручної возні з dSYM або mapping-файлами. Як зазначено в офіційній документації, Crashlytics автоматично перехоплює необроблені винятки та сигнали (SIGABRT, EXC_BAD_ACCESS) і навіть C++ краші через NDK. Ми використовуємо Crashlytics на production проектах і гарантуємо crash-free rate вище 99,5%. Символізація відбувається автоматично: назви методів і номери рядків підставляються без завантаження символів вручну. Для iOS достатньо налаштувати dSYM upload через Build Phases або Fastlane; для Android — підключити плагін Gradle, який сам завантажує mapping-файли після кожної релізної збірки.
Crashlytics швидше завантажує символи — у 3 рази швидше Sentry за даними наших тестів. Таблиця нижче показує ключові відмінності:
| Параметр | Crashlytics | Sentry |
|---|---|---|
| Автоматична символізація | Так | Вимагає CLI |
| dSYM upload | Run Script в Xcode, Fastlane | Ручне завантаження |
| Non-fatal logging | record(error:) | CaptureException |
| Crash-free rate | Вбудований | Додаткове налаштування |
| Ціна | Безкоштовно (у Firebase Spark) | Платний (стартовий тариф) |
Як ми підключаємо Crashlytics?
Підключення на iOS
Через Swift Package Manager додаємо firebase-ios-sdk, потім у AppDelegate:
import FirebaseCrashlytics import FirebaseCore @main struct MyApp: App { init() { FirebaseApp.configure() } } Це все для базового репортингу — SDK перехоплює необроблені винятки та сигнали (SIGABRT, EXC_BAD_ACCESS) автоматично.
Критичний момент — dSYM upload. У Xcode переконайтесь, що Build Settings → DEBUG_INFORMATION_FORMAT = DWARF with dSYM File для Release. Без цього в дашборді будуть адреси пам'яті замість імен функцій. Для CI ми використовуємо Fastlane для upload.
Підключення на Android
// build.gradle (app) implementation("com.google.firebase:firebase-crashlytics:18.+") implementation("com.google.firebase:firebase-crashlytics-ndk:18.+") // для C++ крашів Плагін com.google.firebase.crashlytics у build.gradle автоматично завантажує R8/ProGuard mapping-файл після кожної release-збірки. Без плагіна — mapping завантажувати вручну через Firebase CLI.
Кастомні ключі та логи для діагностики
Голий стектрейс часто не пояснює, чому впало. Crashlytics дозволяє прикріплювати контекст:
// iOS Crashlytics.crashlytics().setCustomValue(userId, forKey: "user_id") Crashlytics.crashlytics().setCustomValue("checkout", forKey: "last_screen") Crashlytics.crashlytics().log("CartViewModel: початок оплати") // Android Firebase.crashlytics.setCustomKey("user_id", userId) Firebase.crashlytics.setCustomKey("last_screen", "checkout") Firebase.crashlytics.log("CartViewModel: початок оплати") Ці дані з'являються у вкладці Keys і Logs кожного краш-репорту. На практиці це скорочує час діагностики: одразу видно, що впало у анонімного користувача на екрані оплати, а не просто в URLSession.dataTask.
Non-fatal помилки та як їх логувати
Не всі проблеми — краші. Мережева помилка, невдалий парсинг JSON, timeout — все це варто логувати без завершення сесії:
Crashlytics.crashlytics().record(error: NetworkError.timeout) У дашборді non-fatal помилки потрапляють в окремий розділ Non-fatals. Зручно для моніторингу деградації API без зростання crash-free rate.
Crash-free rate та алерти
Firebase Console показує crash-free users — відсоток сесій без крашу. Норма для production — вище 99,5%. Налаштовуємо email-алерт при падінні нижче порогу через Firebase Alerts, або підключаємо webhook у PagerDuty через Firebase Extensions.
Як налаштувати алерти при падінні crash-free rate?
У Firebase Console перейдіть у розділ Alerts і створіть правило для Crashlytics. Виберіть метрику "crash-free users" та поріг, наприклад 99.5%. При досягненні порогу система надсилає email або викликає webhook. Для серйозних проектів підключаємо Firebase Extensions до PagerDuty або Slack — сповіщення приходять миттєво.
Етапи інтеграції
| Етап | Опис | Строк |
|---|---|---|
| 1. Додавання залежностей | SPM/Gradle/CocoaPods | 0,5 дня |
| 2. dSYM/mapping upload | Fastlane скрипт або Xcode Run Script | 0,5 дня |
| 3. Кастомні ключі | User ID, навігація, бізнес-логіка | 0,5 дня |
| 4. Non-fatal logging | 10+ точок у додатку | 0,5 дня |
| 5. Алерти | Email/PagerDuty | 0,5 дня |
Що входить у роботу
- Додавання залежностей через SPM, CocoaPods або Gradle
- Налаштування dSYM upload для iOS через Fastlane або Xcode Build Phases
- Налаштування ProGuard/R8 mapping upload для Android
- Додавання кастомних ключів для User ID, сесії, навігаційного шляху
- Логування non-fatal помилок у ключових точках
- Налаштування алертів у Firebase Console
Строки
Базова інтеграція з dSYM/mapping upload: 0,5–1 день. Додавання кастомних ключів та non-fatal у кодовій базі — ще 0,5–1 день залежно від розміру проекту. Зв'яжіться з нами — ми оцінимо ваш проект і запропонуємо інтеграцію під ключ. Досвід нашої команди: більше 50 проектів з Crashlytics, підтримка crash-free rate вище 99,5% на всіх production збірках. Отримайте консультацію з інтеграції Crashlytics у ваш додаток.







