Crash Reporting mobil inkişafda — bu nədir, xidmətlər və qurulum

Müəllif: IT Sectr Dərc olunub: 2026-05-27 Oxuma vaxtı: 8 dəq

Crash Reporting — mobil tətbiqin qəzaları haqqında məlumatların toplanması, emalı və analizi sistemi olub, proqramçılara istehsal mühitində səhvləri aşkar etməyə və aradan qaldırmağa imkan verir. Google Firebase, 2024 məlumatlarına görə, crash-reporting-in tətbiqi problemlərin diaqnostika müddətini saatlardan dəqiqələrə endirir və buraxılışların sabitliyini 35–50% artırır. Belə bir sistem olmadan proqramçılar crash barədə yalnız istifadəçi rəylərindən öyrənirlər.

Başlıca

  • Crash Reporting — tətbiq qəzaları haqqında məlumatların mühit konteksti və çağırış yığını ilə avtomatik toplanması
  • Firebase Crashlytics — ən populyar crash-reporting xidməti, pulsuz və Google ekosistemi ilə inteqrasiya edilmiş
  • Sentry — genişləndirilmiş analiz imkanları və 80+ proqramlaşdırma dili dəstəyi ilə açıq mənbə platforma
  • Çağırış yığını — hər crash hesabatı sətir nömrələri və metod adları ilə tam çağırış yığını ehtiva edir
  • Non-fatal hesabatlar — crash-dan əlavə, sistemlər handled exceptions-ları qeyd edərək tətbiqdəki səhvlərin tam şəklini verir

Crash Reporting nədir?

Crash Reporting — tətbiqin qəzaları haqqında texniki məlumatların avtomatik toplanması və analiz üçün mərkəzləşdirilmiş şəkildə serverə göndərilməsi prosesidir. Loglamadan fərqli olaraq, crash-reporting məhz qəza vəziyyətlərini — tətbiqin sistem və ya OS tərəfindən məcburi dayandırıldığı anı qeyd edir.

Hər crash hesabatı üç əsas komponenti ehtiva edir: istisna növü (NullPointerException, SIGSEGV, NSInternalInconsistencyException), sətir nömrələri ilə tam çağırış yığını və mühit haqqında məlumat — OS versiyası, cihaz modeli, boş yaddaşın miqdarı. Sentry Engineering, 2024 məlumatlarına görə, məhz bu üç elementin birləşməsi 85% kritik səhvlərin bərpasına və düzəldilməsinə imkan verir.

Müasir crash-reporting sistemləri funksionallığı adi crash-dan kənara genişləndirir. Firebase Crashlytics təkrarlanan qəzaları avtomatik olaraq issues-də qruplaşdırır, Sentry buraxılışlar arasında reqressiyaları izləyir, Bugsnag isə səhvə aparan istifadəçi yolunu göstərir. Hər üç xidmət iOS, Android, React Native və Flutter-i dəstəkləyir.

Google I/O 2024 məlumatlarına görə, crash-reporting olmayan tətbiqlər bir kritik səhvin diaqnostikasına orta hesabla 3–5 iş günü sərf edir, Crashlytics ilə isə 15–30 dəqiqə. Hər insident üçün vaxta qənaət 90%-dən çoxdur.

Crash hesabatlarının toplanması sistemi necə işləyir

Arxitektura crash-reporting sistemi üç qatdan ibarətdir: tətbiqdə quraşdırılmış müştəri SDK, hesabatları qəbul etmək və emal etmək üçün server API və analiz üçün veb dashboard. Müştəri SDK işlənməmiş istisnaları tətbiqin növbəti başlatılması zamanı serverə göndərir.

Crash hesabatının göndərilməsi tətbiqin yenidən başlatılmasından sonra asinxron olaraq baş verir. Bu əsas məqamdır: crash anında tətbiq şəbəkə vasitəsilə məlumatların uğurlu göndərilməsinə zəmanət verə bilməz. SDK hesabatı yerli yaddaşda saxlayır və növbəti başlatmada fon vəsaiti ilə göndərir. Firebase Engineering, 2024 məlumatlarına görə, bu yanaşma crash hesabatlarının 99.7%-nin çatdırılmasını təmin edir.

Non-fatal istisnalar üçün (try-catch daxilində handled exceptions) SDK hesabatı dərhal göndərir, çünki tətbiq işləməyə davam edir. Non-fatal hesabatlar crash ilə eyni məlumatları ehtiva edir, lakin istifadəçi sessiyasını kəsmir. Bu, API sorğularının səhvlərini, məlumat validasiyasını və biznes məntiqini izləmək üçün xüsusilə faydalıdır.

Crash qruplaşdırma — son 5–10 çərçivənin heşinə əsaslanaraq eyni crash-ları birləşdirən server alqoritmi. Bu, proqramçıya 1000 fərdi hesabat deyil, müxtəlif cihaz və OS versiyalarını əhatə edən 1000 hadisəli bir issue görməyə imkan verir.

Firebase Crashlytics: inteqrasiya və imkanlar

Firebase Crashlytics — mobil tətbiqlər üçün ən populyar crash-reporting xidməti olub, dünyada 3 milyondan çox layihədə istifadə olunur. Pulsuz tarif məhdudiyyətsiz sayda hesabat, Google Analytics ilə inteqrasiya və crash-ların avtomatik qruplaşdırılmasını əhatə edir.

Crashlytics-in Android-də inteqrasiyası

Qoşulma Crashlytics Android-də minimaldır: build.gradle-ə asılılıq əlavə edin və SDK-nı Application.onCreate-də başlatın. Crashlytics avtomatik olaraq öz Thread.setDefaultUncaughtExceptionHandler-i qurur və bütün işlənməmiş istisnaları tətbiq edir.

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

Əasas funksiya Crashlytics — custom keys və logs. Proqramçı hər crash hesabatına 64 açar-dəyər cütlərinə qədər əlavə edə bilər: ekran vəziyyəti, seçilmiş tarif, istifadəçi səviyyəsi. Həmçinin xronoloji ardıcıllıqla hesabata daxil olan xüsusi log mesajlarını qeyd etmək mümkündür.

Velocity Alert — reqressiyaların avtomatik aşkarlanması

Velocity Alert — müəyyən bir issue üçün crash sayının kəskin artımını izləyən Crashlytics funksiyası. Yeni buraxılışdan sonra qəza sayı hədd dəyərini keçərsə, komanda kütləvi istifadəçi şikayətlərindən 5–15 dəqiqə əvvəl push bildirişi və e-məktub alır.

İşləmə həddinin qurulması: kritik issues üçün 1 saat ərzində 2x. Google, 2024 məlumatlarına görə, Velocity Alert aktiv olan komandalar dashboard-ın əl ilə monitorinqinə güvənən komandalardan orta hesabla 40% daha sürətli hotfix buraxılışları edir.

Crashlytics-in iOS-da inteqrasiyası

iOS-da Crashlytics SDK CocoaPods və ya Swift Package Manager vasitəsilə inteqrasiya olunur. SDK həm Objective-C istisnalarını (NSSetUncaughtExceptionHandler vasitəsilə), həm də OS siqnallarını (SIGSEGV, SIGABRT) öz mach exception handler-i vasitəsilə tətbiq edir.

Apple Developer, 2024 məlumatlarına görə, iOS üçün Crashlytics standart vasitələrlə tətbiq edilməyən aşağı səviyyəli yaddaş səhvləri də daxil olmaqla bütün qəza növlərinin 98%-ə qədərini emal edir. Bu, Crashlytics-i iOS inkişafı üçün de-fakto standarta çevirir.

Sentry və Bugsnag: alternativ platformalar

Sentry80+ dil və çərçivəni dəstəkləyən açıq mənbə səhv monitorinq platforması. Crashlytics-dən fərqli olaraq, Sentry backend proqramçılarına yönəlib, lakin iOS, Android, React Native və Flutter üçün tam SDK təqdim edir.

Sentry-in əsas üstünlüyü Performance Monitoring-in vahid dashboard-da olmasıdır. Proqramçı təkcə crash deyil, həm də onlara səbəb olan əməliyyatları görür: yavaş şəbəkə sorğuları, UI donmaları, verilənlər bazası ilə uzun əməliyyatlar. Sentry, 2024 məlumatlarına görə, crash-ların 40%-nin belə bir yanaşma olmadan görünməz qalan əvvəlcədən performans problemləri var.

Bugsnag səhvlərin qruplaşdırılmasına yanaşması ilə fərqlənir — çağırış yığını əvəzinə istifadəçi yolunu (user journey) təhlil edir. Hər crash hesabatı səhvə səbəb olan ekranlar və istifadəçi hərəkətlərinin ardıcıllığını ehtiva edir. Bu, mürəkkəb biznes prosesləri üçün xüsusilə faydalıdır: sifariş vermə, qeydiyyat, ödəniş.

Xidmətlərin dəyəri müxtəlifdir: Crashlytics Firebase çərçivəsində pulsuzdur, Sentry ayda 5000 hadisə üçün pulsuz tarif təklif edir, Bugsnag isə ayda $29-dan başlayır. Hər üç platforma açıq mənbə kodlu SDK təmin edir. Xidmətin seçimi komandanın ölçüsündən, büdcədən və məlumat təhlükəsizliyi tələblərindən asılıdır.

iOS-da Crash Reporting: xüsusiyyətlər və NSException

iOS-un xüsusiyyəti — çoxqatlu səhv idarəetmə arxitekturası. Crash-reporting SDK-ları Objective-C istisnalarını (NSException), Swift səhvlərini (Error), POSIX siqnallarını (SIGSEGV, SIGBUS) və mach-istisnalarını tətbiq etməlidir. Hər növ ayrı tətbiq mexanizmi tələb edir.

NSException — NSSetUncaughtExceptionHandler vasitəsilə tətbiq edilən ən sadə növdür. Lakin Apple, 2024 məlumatlarına görə, müasir Swift tətbiqlərində crash-ların yalnız 30%-i NSException-dır. Qalan 70% OS siqnalları və mach exception handler mexanizmi tələb edən Swift işləmə mühiti səhvləridir.

iOS proqramçıları crash-reporting-i müxtəlif növlərdə yerli crash generasiyası vasitəsilə test etməlidirlər: siqnallar üçün __builtin_trap(), istisnalar üçün [NSException raise:...], Swift üçün fatalError(). Yalnız bu şəkildə SDK-nın bütün qəza növlərini əhatə etdiyinə əmin olmaq olar.

Android-də Crash Reporting: ANR və native crashes

Android iOS-da olmayan iki spesifik qəza növü əlavə edir: ANR (Application Not Responding) və C/C++ kodunda native crash. ANR UI sətirinin 5 saniyədən çox bloklandıqda baş verir — sistem “Proqram cavab vermir” dialoqu göstərir və onu bağlamağı təklif edir.

Standart Thread.setDefaultUncaughtExceptionHandler ANR-ni tətbiq etmir, çünki bu istisna deyil, ActivityManager-dən gələn siqnaldır. ANR-ni izləmək üçün Crashlytics və Sentry hər 5 saniyədən bir UI sətirinin cavab qabiliyyətini yoxlayan fon watchdog sətirindən istifadə edir. Firebase, 2024 məlumatlarına görə, Android-dəki bütün problemlərin 15%-i crash deyil, ANR-dir.

Native crash Android-də JNI (Java Native Interface) vasitəsilə işlədilən C/C++ kodunda baş verir. Bu qəzalar Java istisnaları deyil və Thread.setDefaultUncaughtExceptionHandler tərəfindən tətbiq edilmir. Onların emalı üçün SIGSEGV, SIGABRT, SIGBUS siqnalları üçün sigaction işləyiciləri quran Google Breakpad və ya Crashpad istifadə olunur.

Google I/O 2024 məlumatlarına görə, oyun mühərriklərinin (Unity, Unreal Engine) və kompüter görmə kitabxanalarının (ML Kit, OpenCV) yayılması ilə native crash sayı artır. Hibrid tətbiq proqramçılarına həmişə native crash-reporting-i qoşmaq tövsiyə olunur.

Tez-tez verilən suallar

Crash-reporting adi loglamadan nə ilə fərqlənir?

Crash-reporting yalnız tam kontekstli qəza vəziyyətlərini qeyd edir — çağırış yığını, yaddaş vəziyyəti, OS versiyası. Loglama tətbiqin bütün hadisələrini qeyd edir. Crash-reporting avtomatik olaraq məlumatları serverə göndərir, loglama əl ilə analiz tələb edir.

Startup üçün hansı crash-reporting xidmətini seçməli?

Firebase Crashlytics — startup-lar üçün optimal seçimdir: pulsuz, inteqrasiyası asan, iOS və Android-i dəstəkləyir. Layihə böyüdükcə performance monitoring üçün Sentry və ya istifadəçi yollarını təhlil üçün Bugsnag əlavə edilə bilər.

Crash-reporting-i qapalı enterprise layihələrdə istifadə etmək olarmı?

Bəli — Sentry öz serverlərinizdə yerləşdirilən self-hosted versiya təklif edir. Bütün məlumatlar şirkətin infrastrukturu daxilində qalır. Crashlytics və Bugsnag yalnız Google və SmartBear serverlərində bulud xidmətləri kimi işləyir.

Crash-reporting tətbiqin ölçüsünə necə təsir edir?

Minimal — Crashlytics SDK APK/IPA ölçüsünə ~300 KB əlavə edir. Sentry — ~500 KB. Hər iki xidmət Android üçün ProGuard/R8 obfuskasiyasını və iOS üçün Bitcode-u dəstəkləyir, bu da ikilik faylın son ölçüsünə təsiri azaldır.

Niyə crash hesabatı gəlməyə bilər?

Əasas səbəblər: işləyicinin vaxtının bitməsi (iOS 5 san, Android 100 ms), növbəti başlatmada şəbəkənin olmaması, yerli yaddaşın zədələnməsi. Crashlytics işləyici vaxt limitinə əməl edildikdə hesabatların 99.7%-nin çatdırılmasına zəmanət verir.

Nəticələr

  • Crash Reporting — səhvlərin diaqnostikasını günlərdən dəqiqələrə endirən istehsal tətbiqinin məcburi komponenti
  • Firebase Crashlytics — pulsuz tarif və crash-ların issues-də avtomatik qruplaşdırılması ilə bazar lideri
  • Sentry — performance monitoring və self-hosted yerləşdirmə ilə açıq mənbə alternativ
  • iOS crash-reporting tam əhatə üçün NSException, POSIX siqnalları və mach-istisnalarının tətbiqini tələb edir
  • Android ANR standart Thread.setDefaultUncaughtExceptionHandler tərəfindən tətbiq edilmir — watchdog sətiri tələb olunur
  • Native crash JNI kodunda sigaction işləyiciləri ilə Breakpad və ya Crashpad vasitəsilə emal olunur
  • Non-fatal hesabatlar istifadəçi sessiyasını kəsmədən handled exceptions və biznes məntiqini əhatəni genişləndirir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun