Crash Reporting — mobil ilova qulashlari haqida ma’lumotlarni yig‘ish, qayta ishlash va tahlil qilish tizimi bo‘lib, dasturchilarga ishlab chiqarish muhitida xatolarni aniqlash va bartaraf etish imkonini beradi. Google Firebase, 2024 ma’lumotlariga ko‘ra, crash-reporting joriy etilishi muammolarni diagnostika qilish vaqtini soatlardan daqiqalarga qisqartiradi va relizlar barqarorligini 35–50% ga oshiradi. Bunday tizimsiz dasturchilar crash haqida faqat foydalanuvchi sharhlaridan bilib oladilar.
Asosiy
Crash Reporting — ilova qulashlari haqida texnik ma’lumotlarni avtomatik yig‘ish va tahlil qilish uchun markazlashtirilgan holda serverga yuborish jarayoni. Loglashdan farqli o‘laroq, crash-reporting aynan avariya holatlarini — ilova tizim yoki OS tomonidan majburiy to‘xtatilgan paytni qayd etadi.
Har bir crash hisoboti uchta asosiy komponentni o‘z ichiga oladi: istisno turi (NullPointerException, SIGSEGV, NSInternalInconsistencyException), satr raqamlari bilan to‘liq qo‘ng‘iroqlar steki va muhit haqida ma’lumot — OS versiyasi, qurilma modeli, bo‘sh xotira miqdori. Sentry Engineering, 2024 ma’lumotlariga ko‘ra, aynan shu uch elementning kombinatsiyasi 85% kritik xatolarni qayta tiklash va tuzatish imkonini beradi.
Zamonaviy crash-reporting tizimlari funksionallikni oddiy crash dan tashqariga kengaytiradi. Firebase Crashlytics takrorlanuvchi qulashlarni avtomatik ravishda issues da guruhlaydi, Sentry relizlar orasidagi regressiyalarni kuzatadi, Bugsnag esa xatoga olib kelgan foydalanuvchi yo‘lini ko‘rsatadi. Har uchala xizmat iOS, Android, React Native va Flutter ni qo‘llab-quvvatlaydi.
Google I/O 2024 ma’lumotlariga ko‘ra, crash-reporting siz ilovalar bitta kritik xatoni diagnostika qilishga o‘rtacha 3–5 ish kunini sarflaydi, Crashlytics bilan esa — 15–30 daqiqa. Har bir insident uchun vaqt tejash 90% dan oshadi.
Arxitektura crash-reporting tizimi uch qatlamdan iborat: ilovada o‘rnatilgan mijoz SDK, hisobotlarni qabul qilish va qayta ishlash uchun server API va tahlil uchun veb dashboard. Mijoz SDK ishlov berilmagan istisnolarni ushlaydi, ularni JSON ga seriyalashtiradi va ilovaning keyingi ishga tushirilishida serverga yuboradi.
Crash hisobotini yuborish ilova qayta ishga tushirilgandan so‘ng asinxron ravishda amalga oshiriladi. Bu muhim jihat: crash paytida ilova ma’lumotlarni tarmoq orqali muvaffaqiyatli yuborishni kafolatlay olmaydi. SDK hisobotni mahalliy omborda saqlaydi va keyingi ishga tushirishda fon ipi orqali yuboradi. Firebase Engineering, 2024 ma’lumotlariga ko‘ra, bunday yondashuv crash hisobotlarining 99.7% yetkazilishini ta’minlaydi.
Non-fatal istisnolar uchun (try-catch ichidagi handled exceptions) SDK hisobotni darhol yuboradi, chunki ilova ishlashda davom etadi. Non-fatal hisobotlar crash bilan bir xil ma’lumotlarni o‘z ichiga oladi, ammo foydalanuvchi sessiyasini to‘xtatmaydi. Bu, ayniqsa, API so‘rovlari xatolarini, ma’lumotlar validatsiyasini va biznes mantiqini kuzatish uchun foydalidir.
Crash guruhlash — so‘nggi 5–10 stek ramkasining heshiga asoslangan holda bir xil crashlarni birlashtiruvchi server algoritmi. Bu dasturchiga 1000 ta alohida hisobot emas, balki turli qurilmalar va OS versiyalarini qamrab olgan 1000 ta hodisali bitta issue ni ko‘rish imkonini beradi.
Firebase Crashlytics — mobil ilovalar uchun eng mashhur crash-reporting xizmati bo‘lib, dunyo bo‘ylab 3 milliondan ortiq loyihada qo‘llaniladi. Bepul tarif cheksiz hisobotlar, Google Analytics bilan integratsiya va crashlarni avtomatik guruhlashni o‘z ichiga oladi.
Ulash Crashlytics ni Android ga minimal: build.gradle ga bog‘liqlik qo‘shing va SDK ni Application.onCreate da ishga tushiring. Crashlytics avtomatik ravishda o‘z Thread.setDefaultUncaughtExceptionHandler ini o‘rnatadi va barcha ishlov berilmagan istisnolarni ushlaydi.
// 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)
}
}
Asosiy funksiya Crashlytics — custom keys va logs. Dasturchi har bir crash hisobotiga 64 tagacha kalit-qiymat juftligini qo‘shishi mumkin: ekran holati, tanlangan tarif, foydalanuvchi darajasi. Shuningdek, xronologik tartibda hisobotga tushadigan maxsus log xabarlarini yozish mumkin.
Velocity Alert — ma’lum bir issue uchun crash sonining keskin o‘sishini kuzatuvchi Crashlytics funksiyasi. Yangi relizdan so‘ng qulashlar soni chegara qiymatidan oshsa, jamoa ommaviy foydalanuvchi shikoyatlaridan 5–15 daqiqa oldin push bildirishnoma va elektron xat oladi.
Ishga tushirish chegarasini sozlash: kritik issues uchun 1 soat ichida 2x. Google, 2024 ma’lumotlariga ko‘ra, Velocity Alert yoqilgan jamoalar dashboard ni qo‘lda kuzatishga tayanadigan jamoalardan o‘rtacha 40% tezroq hotfix relizlarini chiqaradi.
iOS da Crashlytics SDK CocoaPods yoki Swift Package Manager orqali integratsiya qilinadi. SDK Objective-C istisnolarini (NSSetUncaughtExceptionHandler orqali) va OS signallarini (SIGSEGV, SIGABRT) o‘z mach exception handler i orqali ushlaydi.
Apple Developer, 2024 ma’lumotlariga ko‘ra, iOS uchun Crashlytics standart vositalar bilan ushlanmaydigan past darajadagi xotira xatolarini ham o‘z ichiga olgan holda barcha qulash turlarining 98% gacha qayta ishlaydi. Bu Crashlytics ni iOS rivojlanishi uchun de-fakto standartga aylantiradi.
Sentry — 80+ til va freymvorklarni qo‘llab-quvvatlovchi ochiq manba xato monitoring platformasi. Crashlytics dan farqli o‘laroq, Sentry backend dasturchilariga yo‘naltirilgan, ammo iOS, Android, React Native va Flutter uchun to‘liq SDK ni taqdim etadi.
Sentry ning asosiy afzalligi — Performance Monitoring ning yagona dashboardda bo‘lishi. Dasturchi nafaqat crash ni, balki ularga olib kelgan tranzaksiyalarni ham ko‘radi: sekin tarmoq so‘rovlari, UI osilishlari, ma’lumotlar bazasi bilan uzoq operatsiyalar. Sentry, 2024 ma’lumotlariga ko‘ra, crash larning 40% oldingi unumdorlik muammolariga ega bo‘lib, ular bunday yondashuvsiz sezilmay qoladi.
Bugsnag xatolarni guruhlashga yondashuvi bilan farqlanadi — qo‘ng‘iroqlar steki o‘rniga foydalanuvchi yo‘lini (user journey) tahlil qiladi. Har bir crash hisoboti xatoga olib kelgan ekranlar va foydalanuvchi harakatlari ketma-ketligini o‘z ichiga oladi. Bu, ayniqsa, murakkab biznes jarayonlari uchun foydali: buyurtma berish, ro‘yxatdan o‘tish, to‘lov.
Xizmatlar narxi turlicha: Crashlytics Firebase doirasida bepul, Sentry oyiga 5000 ta hodisa uchun bepul tarifni taklif qiladi, Bugsnag — oyiga $29 dan boshlanadi. Har uchala platforma ochiq manba kodli SDK ni taqdim etadi. Xizmatni tanlash jamoa hajmi, byudjet va ma’lumotlar xavfsizligi talablariga bog‘liq.
iOS xususiyati — ko‘p qatlamli xato boshqarish arxitekturasi. Crash-reporting SDK lari Objective-C istisnolarini (NSException), Swift xatolarini (Error), POSIX signallarini (SIGSEGV, SIGBUS) va mach-istisnolarini ushlashi kerak. Har bir tur alohida ushlash mexanizmini talab qiladi.
NSException — NSSetUncaughtExceptionHandler orqali ushlash uchun eng oddiy tur. Biroq, Apple, 2024 ma’lumotlariga ko‘ra, zamonaviy Swift ilovalaridagi crash larning atigi 30% NSException dir. Qolgan 70% OS signallari va mach exception handler mexanizmini talab qiluvchi Swift ish vaqti xatolaridir.
iOS dasturchilari crash-reporting ni turli turdagi mahalliy crash generatsiyasi orqali sinab ko‘rishlari kerak: signallar uchun __builtin_trap(), istisnolar uchun [NSException raise:...], Swift uchun fatalError(). Faqat shu tarzda SDK barcha qulash turlarini qamrab olishiga ishonch hosil qilish mumkin.
Android iOS da mavjud bo‘lmagan ikkita o‘ziga xos qulash turini qo‘shadi: ANR (Application Not Responding) va C/C++ kodidagi native crash. ANR UI ipi 5 soniyadan ortiq bloklanganda yuz beradi — tizim “Ilova javob bermayapti” dialogini ko‘rsatadi va uni yopishni taklif qiladi.
Standart Thread.setDefaultUncaughtExceptionHandler ANR ni ushlamaydi, chunki bu istisno emas, balki ActivityManager dan kelgan signaldir. ANR ni kuzatish uchun Crashlytics va Sentry har 5 soniyada UI ipining javob berish qobiliyatini tekshiruvchi fon watchdog ipidan foydalanadi. Firebase, 2024 ma’lumotlariga ko‘ra, Android dagi barcha muammolarning 15% ANR, crash emas.
Native crash Android da JNI (Java Native Interface) orqali ishga tushirilgan C/C++ kodida yuz beradi. Bu qulashlar Java istisnolari emas va Thread.setDefaultUncaughtExceptionHandler tomonidan ushlanmaydi. Ularni qayta ishlash uchun SIGSEGV, SIGABRT, SIGBUS signallari uchun sigaction ishlovchilarini o‘rnatuvchi Google Breakpad yoki Crashpad ishlatiladi.
Google I/O 2024 ma’lumotlariga ko‘ra, o‘yin dvigatellari (Unity, Unreal Engine) va kompyuter ko‘rish kutubxonalarining (ML Kit, OpenCV) tarqalishi bilan native crash lar soni ortib bormoqda. Gibrid ilova dasturchilariga har doim native crash-reporting ni ulash tavsiya etiladi.
Tez-tez beriladigan savollar
Crash-reporting faqat to‘liq kontekstli avariya holatlarini qayd etadi — qo‘ng‘iroqlar steki, xotira holati, OS versiyasi. Loglash ilovaning barcha hodisalarini yozib oladi. Crash-reporting ma’lumotlarni avtomatik ravishda serverga yuboradi, loglash qo‘lda tahlil qilishni talab qiladi.
Firebase Crashlytics — startup lar uchun eng yaxshi tanlov: bepul, integratsiyasi oson, iOS va Android ni qo‘llab-quvvatlaydi. Loyiha o‘sishi bilan performance monitoring uchun Sentry yoki foydalanuvchi yo‘llarini tahlil qilish uchun Bugsnag qo‘shilishi mumkin.
Ha — Sentry o‘z serverlaringizda joylashtiriladigan self-hosted versiyani taklif qiladi. Barcha ma’lumotlar kompaniya infratuzilmasi ichida qoladi. Crashlytics va Bugsnag faqat Google va SmartBear serverlarida bulut xizmatlari sifatida ishlaydi.
Minimal — Crashlytics SDK APK/IPA hajmiga ~300 KB qo‘shadi. Sentry — ~500 KB. Ikkala xizmat ham Android uchun ProGuard/R8 obfuskatsiyasini va iOS uchun Bitcode ni qo‘llab-quvvatlaydi, bu esa ikkilik faylning yakuniy hajmiga ta’sirni kamaytiradi.
Asosiy sabablar: ishlovchi vaqtining tugashi (iOS 5 son, Android 100 ms), keyingi ishga tushirishda tarmoqning yo‘qligi, mahalliy omborning shikastlanishi. Crashlytics ishlovchi vaqt limitiga rioya qilinganda hisobotlarning 99.7% yetkazilishini kafolatlaydi.
Xulosalar
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.