Firebase Crashlytics — nedir, çökmeler ve arıza teşhisi

Yazar: IT Sectr Yayınlanma: 2026-04-27 Okuma süresi: 10 dk

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 — günde 500 bin oturuma kadar ücretsiz tarifeyle otomatik çökme toplayıcısı.
  • SDK, Android'de Kotlin, Java, Swift, Objective-C, native C/C++ ve ANR istisnalarını yakalar.
  • Her rapor, yığın izi, uygulama sürümü, cihaz modeli ve özel günlükler içerir.
  • Crashlytics, aynı çökmeleri yığın ve sıklığa göre gruplandırarak etkilenen kullanıcı sayısını gösterir.
  • Hizmet, Analytics ile entegredir — aynı arayüzde kullanıcının çökme öncesi yolunu görebilirsiniz.

Firebase Crashlytics Nedir

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.

Tarihçe ve Gelişim

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 Ücretsiz Limitleri

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.

Crashlytics Çökmeleri Nasıl Tespit Eder ve Toplar

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.

Yakalanan Çökme Türleri

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üPlatformlarTetikleyici
FatalAndroid, iOSYakalanmamış istisna
Non-fatalAndroid, iOSManuel Crashlytics.logException() çağrısı
ANRAndroid5 saniyeden fazla yanıt vermeme
SignalAndroid, iOSOS sinyali (SEGV, ABRT, BUS)
OOMiOSBellek yetersizliği

Çökme Raporu Formatı

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.

kotlin
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 Android Projeye Entegrasyonu

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.

groovy
// 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")
}

Crashlytics Eklentisi Yapılandırması

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.

Entegrasyonu Doğrulama

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.

Çökme Analizi ve Rapor Gruplama

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.

Issues ve Gruplama

Çö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.

Sürümlere Göre İstatistikler

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.

Özel Anahtarlar, Günlükler ve Breadcrumbs

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.

Özel Anahtarlar

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.

Olay Günlüğü

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".

kotlin
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)
        }
    }
}

Analytics'ten Breadcrumbs

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.

Çökmelerle Çalışmak İçin En İyi Uygulamalar

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).

Issue'leri Önceliklendirme

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.

CI/CD ile Entegrasyon

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'teki ücretsiz oturum limiti nedir?

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 için Firebase Analytics gerekli mi?

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.

Crashlytics aynı çökmeleri nasıl gruplandırır?

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.

Çökme neden konsolda görüntülenmiyor?

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.

Crashlytics'e ölümcül olmayan hatalar gönderilebilir mi?

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

  • Firebase Crashlytics — proje başına günde 500 bin oturum sınırıyla ücretsiz çökme toplama ve analiz hizmeti.
  • SDK, her iki mobil platformda tüm tür çökmeleri yakalar: ölümcül istisnalar, ANR, OS sinyalleri ve OOM.
  • Her rapor, yığın izi, cihaz durumu, uygulama sürümü ve çökmeden önceki 50 analiz olayını içerir.
  • Entegrasyon, yığınların doğru şekilde çözülmesi için Gradle'da eklenti google-services ve crashlytics gerektirir.
  • Issues, aynı çökmeleri yığın imzasına göre etkilenen kullanıcı sayısına göre önceliklendirerek gruplandırır.
  • Özel anahtarlar ve günlükler, raporu bağlamla zenginleştirmeyi sağlar — abonelik durumu, son ekran, çökmeden önceki adımlar.
  • CI/CD ile Crashlytics API üzerinden entegrasyon, crash-free yüzdesi eşiğin altına düştüğünde dağıtımı engellemeyi sağlar.

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.

Projeyi tartış

Ayrıca okuyun