Firebase Crashlytics, mobil uygulamaların çökmelerini gerçek zamanlı olarak toplamak, gruplamak ve analiz etmek için Google'ın hizmetidir. SDK, işlenmemiş istisnaları, native kod çökmelerini ve ANR sinyallerini otomatik olarak yakalar ve yığın izi, cihaz durumu ve günlüklerle ayrıntılı bir rapor oluşturur. Google, 2026 verilerine göre, Crashlytics dünya çapında 4 milyondan fazla uygulamada kullanılmaktadır. Hizmet, proje başına günde 500 bin oturum sınırıyla ücretsiz olarak sunulmaktadır.
Ana Noktalar
Firebase Crashlytics, Google tarafından 2017 yılında Fabric şirketiyle birlikte satın alınan, mobil uygulamaların kararlılığını izlemek için ücretsiz bir Google hizmetidir. Crashlytics, her uygulama çökmesi hakkında otomatik olarak bilgi toplar, aynı çökmeleri yığın imzasına göre gruplandırır ve bunları Firebase konsolunda etkilenen kullanıcı sayısına göre önceliklendirerek görüntüler.
Crashlytics, 2011 yılında Fabric platformunun bir parçası olarak piyasaya sürüldü ve iOS'ta çökme raporlaması için fiili standart haline geldi. Google tarafından 2017 yılında tahmini 2 milyar dolara (tüm Fabric) satın alındıktan sonra Crashlytics, Firebase SDK'ya entegre edildi. Sürüm 18.0.0 (2021) Kotlin Multiplatform desteğini eklerken, sürüm 19.0.0 (2024) Android'de ek yapılandırma gerektirmeden otomatik ANR toplamayı getirdi. Google (2026) verilerine göre Crashlytics ayda 10 milyardan fazla çökmeyi işlemektedir.
Crashlytics, Firebase projesi başına günde 500 bin oturum sınırıyla ücretsiz olarak sunulmaktadır. Çoğu uygulama için bu yeterlidir — Google (2026) verilerine göre projelerin %95'i limiti aşmaz. Aşım durumunda veri toplama durmaz, ancak raporlar bir sonraki güne kadar güncellenmez. Yüksek yüklü projeler için Firebase'in Spark ve Blaze tarifeleri mevcuttur — Crashlytics her iki tarifede de ücretsiz kalır ve oturum limiti ayrı olarak sayılır.
Toplama mekanizması, platform ve runtime düzeyinde istisnaların yakalanmasına dayanır. Android'de SDK, Kotlin ve Java'nın tüm yakalanmamış istisnalarını yakalayan UncaughtExceptionHandler'ı uygular. iOS'ta Crashlytics, Objective-C/Swift için NSSetUncaughtExceptionHandler'ı ve native kod çökmeleri için kendi Mach istisna işleyicisini kullanır.
Crashlytics beş tür çökmeyi ayırt eder: fatal (ölümcül çökmeler), non-fatal (manuel olarak iletilen ölümcül olmayan istisnalar), ANR (Android — uygulama yanıt vermiyor), signal (OS sinyalleri — SIGSEGV, SIGABRT) ve OOM (iOS'ta bellek yetersizliği). Her tür, ayrı bir mekanizma tarafından işlenir ve konsolda ilgili etiketle görüntülenir.
| Çökme Türü | Platformlar | Tetikleyici |
|---|---|---|
| Fatal | Android, iOS | Yakalanmamış istisna |
| Non-fatal | Android, iOS | Manuel Crashlytics.logException() çağrısı |
| ANR | Android | 5 saniyeden fazla yanıt vermeme |
| Signal | Android, iOS | OS sinyali (SEGV, ABRT, BUS) |
| OOM | iOS | Bellek yetersizliği |
Her Crashlytics raporu kapsamlı bilgi içerir: sınıf adları ve satır numaralarıyla tam yığın izi, uygulama sürümü (versionName + versionCode), cihaz modeli, işletim sistemi sürümü, boş bellek miktarı, ekran yönü ve başlatmadan bu yana geçen süre. Firebase Analytics bağlıysa, rapor ayrıca çökmeden önceki son 50 kullanıcı olayının yolunu da içerir — bu, çökmeyi yeniden oluşturmak için kritik öneme sahiptir.
class CrashlyticsHelper {
fun logNonFatal(error: Throwable) {
FirebaseCrashlytics.getInstance()
.log("Non-fatal: user action = payment_failed")
FirebaseCrashlytics.getInstance()
.recordException(error)
}
fun setUserContext(userId: String) {
FirebaseCrashlytics.getInstance()
.setUserId(userId)
FirebaseCrashlytics.getInstance()
.setCustomKey("subscription", "premium")
}
}
Crashlytics'in bir Android uygulamasına bağlanması, build.gradle'a iki bağımlılık eklenmesini ve Google Services eklentisinin yapılandırılmasını gerektirir. SDK, ek kod gerektirmeden Firebase başlatma sırasında çökme raporlamasını otomatik olarak bağlar. Doğru çalışma için google-services eklentisi ve Firebase konsolundan google-services.json dosyası da gereklidir.
// build.gradle (proje seviyesi)
plugins {
id "com.google.gms.google-services" version "4.4.0"
}
// build.gradle (uygulama seviyesi)
plugins {
id "com.google.firebase.crashlytics"
}
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation("com.google.firebase:firebase-analytics-ktx")
}
com.google.firebase.crashlytics eklentisi iki görevi yerine getirir: karıştırılmış yığınların eşlenmesi için benzersiz bir yapı kimliği (build ID) oluşturur ve Crashlytics SDK için kaynakları otomatik olarak oluşturur. Eklenti olmadan, çökmeler "eşlenmemiş" olarak işaretlenir — kaynak kodu bulma imkanı olmadan yalnızca karıştırılmış sınıf adlarını (a.b.c) görürsünüz. Eklenti, kök build.gradle'a ve uygulama modülünün build.gradle'ına eklenir.
Crashlytics entegrasyonunu test etmek için, test istisnası oluşturan özel forceCrash() yöntemi kullanılır. Production yapılarında bu yöntem kullanılamaz. Test çökmesi çalıştırıldıktan sonra rapor 1-5 dakika içinde Firebase konsolunda görünür. Rapor görüntülenmezse, google-services.json'ın uygulama paketiyle eşleştiğini ve AndroidManifest'te veri toplamayı devre dışı bırakan bayrakların olmadığını kontrol edin.
Crashlytics konsolu iki görüntüleme düzeyi sunar: çökme türüne göre gruplandırılmış tüm çökmelerin (Issues) listesi ve her Issue için izleme, istatistik ve özel verilerle ayrıntılı rapor. Her Issue, aynı imzaya sahip tüm çökmeleri — aynı istisna türü ve eşleşen yığın izini — birleştirir.
Çökme gruplama, Crashlytics'in temel özelliğidir. Binlerce ayrı çökmeyi göstermek yerine, hizmet bunları yığın izinin sağlama toplamı olan parmak izine (fingerprint) dayalı olarak Issues'lerde birleştirir. Bir Issue, 1'den birkaç milyona kadar çökme içerebilir. Her Issue için şunlar görüntülenir: ölümcül vaka sayısı, benzersiz kullanıcı sayısı, çökmenin göründüğü uygulama sürümü ve sorunla karşılaşan kullanıcı yüzdesi.
Google (2026) verilerine göre, Issues'lerin ortalama %20'si bir uygulamanın tüm ölümcül çökmelerinin %80'ini oluşturur (Pareto prensibi). Crashlytics, Issues'leri otomatik olarak ciddiyete göre sıralar — ne kadar çok kullanıcı etkilenirse, öncelik o kadar yüksek olur. Bu, geliştiricinin önce en yaygın sorunları düzeltmesini sağlar.
Crashlytics, her uygulama sürümünün kararlılığını ayrı ayrı izler. Crash-free users grafiği, her sürümde ölümcül çökmeyle karşılaşmayan kullanıcıların yüzdesini gösterir. Güncelleme sırasında yüzde eşiğin altına düşerse (varsayılan %99), Crashlytics e-posta ve Firebase Console üzerinden bildirim gönderir. Bu, sorunlu sürümü hızlıca geri almayı veya acil düzeltme yayınlamayı sağlar.
Crashlytics, raporları bağlamla zenginleştirmek için üç mekanizma sunar: yapılandırılmış veriler için özel anahtarlar (keys), metin izleme için günlükler (logs) ve kullanıcı yolu için Analytics'ten Breadcrumbs. Her üç veri türü de çökme raporuna eklenir ve ayrıntılı kartında görünür.
Custom Keys, her çökmeyle birlikte iletilen "anahtar-değer" çiftleridir. Uygulama başına maksimum 64 anahtar, her anahtar en fazla 1024 karakter uzunluğunda bir dizedir. Anahtarlar, uygulama durumunu işaretlemek için kullanışlıdır: abonelik seviyesi, kimlik doğrulama durumu, son ekran, VPN açık mı kapalı mı. Değerler üzerine yazılır — aynı ada sahip yeni bir anahtar eskisini değiştirir.
Custom Logs, Crashlytics'in 64 KB'lık dairesel bir tamponda sakladığı metin mesajlarıdır. Günlükler otomatik olarak bir sonraki çökmeye eklenir. Çökme olmazsa, günlükler sunucuya iletilmez (trafik tüketmez). Günlük kaydı, kullanıcının çökmeden önceki adımlarını kaydetmek için kullanılır: "payment_processing_started", "api_call_initiated", "response_received_200".
class PaymentViewModel {
fun processPayment(amount: Double) {
FirebaseCrashlytics.getInstance().log("Payment started: amount=$amount")
FirebaseCrashlytics.getInstance().setCustomKey("last_screen", "payment_screen")
FirebaseCrashlytics.getInstance().setCustomKey("subscription_tier", "basic")
try {
paymentGateway.charge(amount)
} catch (e: NetworkException) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
}
Projede Firebase Analytics bağlıysa, Crashlytics otomatik olarak Breadcrumbs alır — çökmeden önceki son 50 analiz olayı. Her breadcrumb, olay adını ve parametrelerini içerir. Bu, çökmeye yol açan tam eylem sırasını yeniden oluşturmayı sağlar: kullanıcı ekranı açtı → ürün ekledi → ödemeye geçti → çökme oldu. Breadcrumbs, Issue kartında ayrı "Loglar" sekmesinde görüntülenir.
Crashlytics, bağlamın doğru yapılandırılması ve Issue işleme süreciyle en etkilidir. Uygulama, çökme yönetimi düzenlemelerini uygulayan ekiplerin kritik hata düzeltme süresini %60 oranında azalttığını göstermektedir (Google, 2026 verileri).
Tüm çökmeler eşit derecede önemli değildir. Kullanıcı sayısına ve sıklığa göre önceliklendirme, en kritik sorunlara odaklanmaya yardımcı olur. Kural: %0,1'den fazla kullanıcıyı etkileyen Issue'leri 24 saat içinde düzeltin. Tek oluşumlu Issue'ler (< %0,01) bir sonraki planlı sürüme ertelenebilir. Crashlytics, düzeltilmiş ancak yeni sürümde tekrar ortaya çıkan Issue'leri otomatik olarak gerileme olarak işaretler.
Crashlytics API, REST API veya Firebase CLI aracılığıyla çökme raporlarının CI/CD hattına entegre edilmesini sağlar. Her yeni sürümde, crash-free kullanıcı yüzdesinin eşik değerini aşıp aşmadığını otomatik olarak kontrol edebilirsiniz. Eşik aşılırsa, CI/CD dağıtımı engeller ve ekibe bildirim gönderir. Firebase CLI, ProGuard/R8 eşleme dosyalarını yüklemek için firebase crashlytics:builds:upload komutunu destekler — bunlar olmadan yığınlar okunamaz olur.
Google (2026) verilerine göre, CI/CD'de otomatik crash-free eşik kontrolü kullanan uygulamalar, production'da %40 daha az gerileme yayınlar. Önerilen eşik: kritik sürümler için crash-free users >= %99,5 ve normal sürümler için >= %99,0.
Sıkça Sorulan Sorular
Crashlytics, Firebase projesi başına günde 500 bin oturuma kadar ücretsizdir. Limit aşıldığında raporlar bir sonraki güne kadar güncellenmez, ancak veri toplama durmaz.
Crashlytics Analytics olmadan çalışır, ancak Analytics ile raporlar Breadcrumbs içerir — çökmeden önceki son 50 kullanıcı olayı. Her iki modülün de bağlanması önerilir.
Gruplandırma, istisna türleri ve satır numaraları dahil yığın izinin sağlama toplamı olan parmak izine (fingerprint) göre yapılır. Aynı parmak izine sahip çökmeler tek bir Issue'de toplanır.
Ayarları kontrol edin: google-services.json dosyası, build.gradle'da crashlytics eklentisinin varlığı, konsolda sürüm filtresinin olmaması ve lisans sözleşmesini kabul eden bir yapının varlığı. Hata ayıklama yalnızca release yapılarında çalışır.
Evet, ölümcül olmayan istisnalar için recordException() kullanın. Bu raporlar uygulamanın çalışmasını kesintiye uğratmaz, ancak konsolda oluşum sayacı ve tam yığın iziyle görüntülenir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun