Mobil geliştirmede Çökme Raporlama — nedir, hizmetler ve yapılandırma

Yazar: IT Sectr Yayınlanma: 2026-05-27 Okuma süresi: 8 dk

Çökme Raporlama, mobil uygulama çökmeleri hakkında bilgi toplama, işleme ve analiz etme sistemidir ve geliştiricilerin üretim ortamında hataları tespit edip düzeltmesine olanak tanır. Google Firebase, 2024'e göre, çökme raporlamanın uygulanması sorun teşhis süresini saatlerden dakikalara düşürür ve sürüm kararlılığını %35–50 oranında artırır. Böyle bir sistem olmadan, geliştiriciler çökmeleri yalnızca kullanıcı yorumlarından öğrenir.

Önemli Noktalar

  • Çökme Raporlama — ortam bağlamı ve çağrı yığını ile uygulama çökme verilerinin otomatik toplanması
  • Firebase Crashlytics — en popüler çökme raporlama hizmeti, ücretsiz ve Google ekosistemi ile entegre
  • Sentry — gelişmiş analiz yetenekleri ve 80+ programlama dili desteği ile açık kaynak platform
  • Çağrı Yığını — her çökme raporu, satır numaraları ve metot adlarıyla birlikte tam çağrı yığını içerir
  • Ölümcül Olmayan Raporlar — çökmelerin yanı sıra, sistemler işlenmiş istisnaları kaydederek uygulamadaki hataların tam resmini sunar

Çökme Raporlama Nedir?

Çökme Raporlama, uygulama çökmeleri hakkında teknik bilgileri otomatik olarak toplama ve analiz için sunucuya merkezi olarak iletme sürecidir. Günlük kaydının aksine, çökme raporlama özellikle acil durumları — uygulamanın sistem veya işletim sistemi tarafından zorla sonlandırıldığı anı yakalar.

Her çökme raporu üç temel bileşen içerir: istisna türü (NullPointerException, SIGSEGV, NSInternalInconsistencyException), satır numaralarıyla birlikte tam çağrı yığını ve ortam bilgileri — işletim sistemi sürümü, cihaz modeli, boş bellek boyutu. Sentry Engineering, 2024'e göre, bu üç öğenin birleşimi kritik hataların %85'inin yeniden üretilmesine ve düzeltilmesine olanak tanır.

Modern çökme raporlama sistemleri, işlevselliği sıradan çökmelerin ötesine taşır. Firebase Crashlytics tekrarlayan çökmeleri otomatik olarak issue'larda gruplar, Sentry sürümler arasındaki gerilemeleri izler ve Bugsnag hataya giden kullanıcı yolunu gösterir. Üç hizmet de iOS, Android, React Native ve Flutter'ı destekler.

Google I/O 2024'e göre, çökme raporlaması olmayan uygulamalar tek bir kritik hatayı teşhis etmek için ortalama 3–5 iş günü harcarken, Crashlytics ile 15–30 dakika sürer. Her olay için zaman tasarrufu %90'ı aşar.

Çökme Raporu Toplama Sistemi Nasıl Çalışır

Mimari çökme raporlama sistemi üç katmandan oluşur: uygulamaya kurulan istemci SDK'sı, raporları almak ve işlemek için sunucu API'si ve analiz için web paneli. İstemci SDK'sı işlenmemiş istisnaları yakalar, JSON'a seri hale getirir ve bir sonraki uygulama başlatılışında sunucuya gönderir.

Çökme raporu gönderimi, uygulama yeniden başlatıldıktan sonra eşzamansız olarak gerçekleşir. Bu temel bir noktadır: çökme anında, uygulama ağ üzerinden başarılı veri iletimini garanti edemez. SDK raporu yerel depolamaya yazar ve bir sonraki başlatılışta bir arka plan iş parçacığı aracılığıyla gönderir. Firebase Engineering, 2024'e göre bu yaklaşım, çökme raporlarının %99,7'sinin teslimatını sağlar.

Ölümcül olmayan istisnalar (try-catch içinde işlenmiş istisnalar) için SDK, uygulama çalışmaya devam ettiği için raporu hemen gönderir. Ölümcül olmayan raporlar, çökmeyle aynı verileri içerir ancak kullanıcı oturumunu kesintiye uğratmaz. Bu, API istek hatalarını, veri doğrulamayı ve iş mantığını izlemek için özellikle yararlıdır.

Çökme gruplama — son 5–10 yığın çerçevesinin karmasına dayalı olarak aynı çökmeleri birleştiren bir sunucu algoritmasıdır. Bu, geliştiricinin 1000 ayrı rapor değil, farklı cihazlar ve işletim sistemi sürümleri genelinde 1000 oluşumlu tek bir issue görmesini sağlar.

Firebase Crashlytics: Entegrasyon ve Özellikler

Firebase Crashlytics, mobil uygulamalar için en popüler çökme raporlama hizmetidir ve dünya çapında 3 milyondan fazla projede kullanılmaktadır. Ücretsiz plan, sınırsız rapor, Google Analytics entegrasyonu ve otomatik çökme gruplama içerir.

Android'te Crashlytics Entegrasyonu

Kurulum Android'te Crashlytics minimaldir: build.gradle'e bağımlılığı ekleyin ve SDK'yı Application.onCreate'te başlatın. Crashlytics otomatik olarak kendi Thread.setDefaultUncaughtExceptionHandler'ını ayarlar ve tüm işlenmemiş istisnaları yakalar.

kotlin
// build.gradle.kts
id("com.google.firebase.crashlytics") version "3.0.2"

// Application.kt
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        FirebaseCrashlytics.getInstance()
            .setCustomKey("environment", "production")
    }

    fun logNonFatal(error: Throwable) {
        FirebaseCrashlytics.getInstance()
            .recordException(error)
    }
}

Temel özellik Crashlytics'in — özel anahtarlar ve günlükler. Geliştirici, her çökme raporuna 64 anahtar-değer çiftine kadar ekleyebilir: ekran durumu, seçilen plan, kullanıcı seviyesi. Kronolojik sırada raporda görünen özel günlük mesajları da mevcuttur.

Velocity Alert — Otomatik Gerileme Tespiti

Velocity Alert, belirli bir issue için çökme sayısındaki keskin artışları izleyen bir Crashlytics özelliğidir. Yeni bir sürümden sonra çökme sayısı bir eşiği aşarsa, ekip toplu kullanıcı şikayetlerinden 5–15 dakika önce bir push bildirimi ve e-posta alır.

Tetikleme eşiği ayarı: kritik issuelar için 1 saatte 2x. Google, 2024'e göre, Velocity Alert etkin olan ekipler, manuel panel izlemeye güvenen ekiplere göre ortalama %40 daha hızlı acil düzeltme sürümleri yayınlar.

iOS'ta Crashlytics Entegrasyonu

iOS'ta Crashlytics SDK'sı CocoaPods veya Swift Package Manager aracılığıyla entegre edilir. SDK, kendi mach istisna işleyicisi aracılığıyla hem Objective-C istisnalarını (NSSetUncaughtExceptionHandler yoluyla) hem de işletim sistemi sinyallerini (SIGSEGV, SIGABRT) yakalar.

Apple Developer, 2024'e göre, iOS için Crashlytics, standart araçlar tarafından yakalanmayan düşük seviyeli bellek hataları da dahil olmak üzere tüm çökme türlerinin %98'ine kadarını işler. Bu, Crashlytics'i iOS geliştirme için fiili standart haline getirir.

Sentry ve Bugsnag: Alternatif Platformlar

Sentry, 80'den fazla dil ve framework destekleyen açık kaynaklı bir hata izleme platformudur. Crashlytics'in aksine, Sentry arka uç geliştiricilerini hedefler ancak iOS, Android, React Native ve Flutter için tam özellikli SDK'lar sağlar.

Sentry'nin temel avantajı, tek bir panelde Performans İzleme'dir. Geliştiriciler yalnızca çökmeleri değil, aynı zamanda bunlara yol açan işlemleri de görür: yavaş ağ istekleri, UI donmaları, uzun veritabanı işlemleri. Sentry, 2024'e göre, çökmelerin %40'ında bu yaklaşım olmadan fark edilmeyen öncül performans sorunları bulunur.

Bugsnag, hata gruplama yaklaşımında farklılık gösterir — çağrı yığını yerine kullanıcı yolculuğunu analiz eder. Her çökme raporu, hataya yol açan ekranlar ve kullanıcı eylemleri sırasını içerir. Bu, özellikle karmaşık iş süreçleri için kullanışlıdır: sipariş verme, kayıt, ödeme.

Hizmet maliyetleri değişir: Crashlytics Firebase içinde ücretsizdir, Sentry ayda 5000 olay için ücretsiz bir plan sunar, Bugsnag ayda 29 dolardan başlar. Üç platform da açık kaynaklı SDK'lar sağlar. Hizmet seçimi, ekip büyüklüğüne, bütçeye ve veri güvenliği gereksinimlerine bağlıdır.

iOS'ta Çökme Raporlama: Özellikler ve NSException

iOS özelliği — çok katmanlı bir hata işleme mimarisidir. Çökme raporlama SDK'ları Objective-C istisnalarını (NSException), Swift hatalarını (Error), POSIX sinyallerini (SIGSEGV, SIGBUS) ve mach istisnalarını yakalamalıdır. Her tür ayrı bir yakalama mekanizması gerektirir.

NSException, NSSetUncaughtExceptionHandler aracılığıyla yakalanması en basit türdür. Ancak Apple, 2024'e göre, modern Swift uygulamalarındaki çökmelerin yalnızca %30'u NSException'dır. Kalan %70'i, mach istisna işleyicisi mekanizması gerektiren işletim sistemi sinyalleri ve Swift çalışma zamanı hatalarıdır.

iOS geliştiricileri, farklı türlerde yerel çökme oluşturma yoluyla çökme raporlamayı test etmelidir: sinyaller için __builtin_trap(), istisnalar için [NSException raise:...], Swift için fatalError(). SDK'nın tüm çökme türlerini kapsadığından emin olmanın tek yolu budur.

Android'te Çökme Raporlama: ANR ve Yerel Çökmeler

Android, iOS'ta bulunmayan iki özel çökme türü ekler: ANR (Uygulama Yanıt Vermiyor) ve C/C++ kodunda yerel çökme. ANR, UI iş parçacığı 5 saniyeden uzun süre bloke olduğunda oluşur — sistem bir "Uygulama yanıt vermiyor" iletişim kutusu gösterir ve kapatmayı önerir.

Standart Thread.setDefaultUncaughtExceptionHandler, ANR'yi yakalamaz çünkü bu bir istisna değil, ActivityManager'dan gelen bir sinyaldir. ANR'yi izlemek için Crashlytics ve Sentry, her 5 saniyede bir UI iş parçacığı yanıt verebilirliğini kontrol eden bir arka plan watchdog iş parçacığı kullanır. Firebase, 2024'e göre, Android'teki tüm sorunların %15'i çökme değil ANR'dir.

Yerel çökmeler Android'te JNI (Java Yerel Arabirimi) aracılığıyla çalıştırılan C/C++ kodunda oluşur. Bu çökmeler Java istisnaları değildir ve Thread.setDefaultUncaughtExceptionHandler tarafından yakalanmaz. Bunları işlemek için SIGSEGV, SIGABRT, SIGBUS sinyalleri için sigaction işleyicileri kuran Google Breakpad veya Crashpad kullanılır.

Google I/O 2024'e göre, oyun motorlarının (Unity, Unreal Engine) ve bilgisayar görüşü kütüphanelerinin (ML Kit, OpenCV) yaygınlaşmasıyla yerel çökme sayısı artmaktadır. Karma uygulama geliştiricilerinin her zaman yerel çökme raporlamayı etkinleştirmeleri önerilir.

Sıkça Sorulan Sorular

Çökme raporlama normal günlük kaydından nasıl farklıdır?

Çökme raporlama, tam bağlamla (çağrı yığını, bellek durumu, işletim sistemi sürümü) yalnızca acil durumları yakalar. Günlük kaydı tüm uygulama olaylarını kaydeder. Çökme raporlama otomatik olarak verileri sunucuya gönderir, günlük kaydı manuel analiz gerektirir.

Bir startup hangi çökme raporlama hizmetini seçmeli?

Firebase Crashlytics startup'lar için en uygun seçimdir: ücretsiz, entegrasyonu kolay, iOS ve Android'i destekler. Proje büyüdükçe, performans izleme için Sentry veya kullanıcı yolculuğu analizi için Bugsnag eklenebilir.

Kapalı kurumsal projelerde çökme raporlama kullanılabilir mi?

Evet — Sentry, kendi sunucularınızda dağıtılan kendi kendine barındırılan bir sürüm sunar. Tüm veriler şirket altyapısı içinde kalır. Crashlytics ve Bugsnag, sırasıyla Google ve SmartBear sunucularıyla yalnızca bulut hizmetleri olarak çalışır.

Çökme raporlama uygulama boyutunu nasıl etkiler?

Minimum düzeyde — Crashlytics SDK'sı APK/IPA boyutuna ~300 KB ekler. Sentry — ~500 KB. Her iki hizmet de Android için ProGuard/R8 karartma ve iOS için Bitcode destekler, bu da son ikili dosya boyutu üzerindeki etkiyi azaltır.

Bir çökme raporu neden ulaşmayabilir?

Ana nedenler: işleyici zaman aşımı süresinin dolması (iOS 5 sn, Android 100 ms), sonraki başlatmada ağ olmaması, yerel depolamanın bozulması. Crashlytics, işleyici zaman sınırına uyulduğunda raporların %99,7'sinin teslimatını garanti eder.

Özet

  • Çökme Raporlama — üretim uygulamasının zorunlu bir bileşeni, hata teşhisini günlerden dakikalara indirir
  • Firebase Crashlytics — ücretsiz plan ve otomatik çökme issue gruplama ile pazar lideri
  • Sentry — performans izleme ve kendi kendine barındırma dağıtımı ile açık kaynak alternatif
  • iOS çökme raporlama tam kapsama için NSException, POSIX sinyalleri ve mach istisnalarını yakalamayı gerektirir
  • Android ANR standart Thread.setDefaultUncaughtExceptionHandler tarafından yakalanmaz — watchdog iş parçacığı gerekir
  • JNI kodunda yerel çökmeler sigaction işleyicileriyle Breakpad veya Crashpad aracılığıyla işlenir
  • Ölümcül olmayan raporlar kullanıcı oturumunu kesintiye uğratmadan işlenmiş istisnaları ve iş mantığını kapsayacak şekilde genişletir

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