Fatal Error — bu ilovaning darhol ishdan chiqishiga olib keladigan tanqidiy xato (crash). Non-fatal errordan farqli o‘laroq, fatal xato dasturga tiklanish imkoniyatini qoldirmaydi — jarayon operatsion tizim yoki runtime muhiti tomonidan favqulodda to‘xtatiladi. Firebase Crashlytics 2024 ma’lumotlariga ko‘ra, o‘rtacha ilova har bir crashdan keyin foydalanuvchilarning 2.5% ini yo‘qotadi va fatal xatolarni bartaraf etish mobil ishlanmada birinchi raqamli ustuvorlikdir. Crash-free rate qanchalik yuqori bo‘lsa, ilovaning do‘konlardagi reytingi shunchalik yuqori va foydalanuvchilar oqimi shunchalik kam bo‘ladi.
Asosiy fikrlar
Fatal Error — bu dasturning keyingi bajarilishi mumkin bo‘lmagan xato. Operatsion tizim yoki virtual mashina ma’lumotlarning shikastlanishini oldini olish uchun jarayonni to‘xtatadi. iOS-da fatal xato SIGABRT yoki SIGSEGV signaliga, Android-da esa ildiz handlerga yetib boradigan va jarayonni to‘xtatadigan boshqarilmagan istisnoga sabab bo‘ladi. Ilova darhol yopiladi, foydalanuvchi bosh ekranga qaytadi.
Fatal xatoning xarakterli belgilari: to‘liq stack trace bilan crash hisoboti, ilovaning kutilmagan yo‘qolishi, tizim jurnalida jarayonning to‘xtatilishi haqida yozuv, yopilishdan oldin qora yoki oq ekran. Foydalanuvchi seansni tiklash imkoniyatisiz bosh ekranni ko‘radi — ilovani nol holatidan qayta ishga tushirish kerak. iOS-da crash Xcode Organizer orqali mavjud bo‘lgan .crash fayliga yoziladi.
Har bir crash foydalanuvchi retensiyasiga salbiy ta’sir ko‘rsatadi. Google Play Console 2024 ma’lumotlariga ko‘ra, crash-free rate 99.5% dan past bo‘lgan ilovalar qidiruv va tavsiyalarda past reyting oladi. Crash-rate App Store va Google Play uchun asosiy sifat ko‘rsatkichlaridan biridir — fatal xatolarning yuqori darajasi yangilanishlarning nashr etilishini bloklashi mumkin. Moliya va tibbiyot ilovalari uchun crash-free rate 99.9% dan past qabul qilinishi mumkin emas.
Null-pointer dereference — mobil ilovalarda fatal xatolarning asosiy sababi. Null ga teng bo‘lgan ob’ektning xususiyati yoki metodiga murojaat qilish Android-da NullPointerException, iOS-da EXC_BAD_ACCESS ni keltirib chiqaradi. JetBrains 2023 ma’lumotlariga ko‘ra, barcha ishlab chiqarish crashlarining taxminan 28% null ko‘rsatkichlar bilan bog‘liq. Kotlin-da null-safety tizimi bu foizni sezilarli darajada kamaytiradi, ammo force unwrap va Java mosligi muammo manbai bo‘lib qolmoqda.
Mavjud bo‘lmagan indeks bo‘yicha kolleksiya elementiga murojaat — crashlarning chastota bo‘yicha ikkinchi sababi. Java va Kotlin-da bu ArrayIndexOutOfBoundsException, Swift-da fatal error: Index out of range. Ko‘pincha filtrlash yoki kolleksiya hajmining dinamik o‘zgarishidan keyin ro‘yxatlar bilan ishlashda yuzaga keladi. getOrNull (Kotlin) yoki indices.contains (Swift) kabi xavfsiz usullardan foydalanish bu turdagi fatal xatolarning oldini oladi.
Xotiraning yetishmasligi (OutOfMemoryError), stekning toshib ketishi (StackOverflowError), mavjud bo‘lmagan resursni yuklash — resurs xatolari ko‘pincha fataldir va takrorlash qiyin. OutOfMemoryError katta tasvirlarni siqilmasdan yuklashda yoki bo‘shatilmagan referenslar tufayli xotira oqishida yuzaga keladi. StackOverflowError — tayanch holatisiz chuqur rekursiya yoki delegatlar zanjirida tsiklik chaqiruvlarda.
Deadlock, race condition, iteratsiya paytida kolleksiyani o‘zgartirish — ko‘p oqimli xatolar noaniq namoyon bo‘ladi va tashxis qo‘yish eng qiyin. Android-da turli oqimlardan ArrayList ni o‘zgartirishda ConcurrentModificationException, iOS-da sinxronizatsiyasiz NSMutableArray ni o‘zgartirish tufayli crash. Kotlin korutinlari (structured concurrency) yoki Swift Actors (iOS 16+) concurrency crashlari ehtimolini kamaytiradi.
Asosiy farq — tiklanish imkoniyati. Non-Fatal Error dasturning ishlashni davom ettirishiga imkon beradi: tarmoq timeouti try-catch bilan boshqariladi, parse xatosi standart qiymat bilan almashtiriladi. Fatal Error ning bunday yo‘li yo‘q — crash muqarrar va ilovani qayta ishga tushirish kerak. Ushbu xato turlari orasidagi chegara ilova arxitekturasi bilan belgilanadi.
| Xususiyat | Fatal Error | Non-Fatal Error |
|---|---|---|
| Ilovaning to‘xtatilishi | Ha | Yo‘q |
| Tiklanish | Mumkin emas | catch bloki orqali mumkin |
| Ma’lumot yig‘ish | Faqat crash-reporter | Koddan loglash |
| UX zarari | Seansning to‘liq buzilishi | Vaqtinchalik noqulaylik |
| Odatiy misol | NullPointerException | IOException |
Xuddi shu xato bir platformada fatal va boshqasida non-fatal bo‘lishi mumkin. Nolga bo‘lish Java/Kotlin-da ArithmeticException ni chiqaradi (fatal emas — tutib olish mumkin), Swift-da fatal error: Division by zero (tutib olish imkoniyatisiz crash). Dasturchi xatolarni boshqarishni loyihalashda muayyan til va runtime muhitining xatti-harakatini hisobga olishi kerak. Fatal va non-fatal o‘rtasidagi chegarani tushunish — bardoshli mobil ilova arxitekturasini qurishning asosidir.
Firebase Crashlytics — mobil ilovalarda crashlarni aniqlash uchun de-fakto standart. SDK avtomatik ravishda stack trace, qurilma holati, operatsion tizim versiyasi va crashdan oldingi jurnallarni yig‘adi. Dashboard bir xil crashlarni bitta issue-da guruhlaydi, ta’sirlangan foydalanuvchilar sonini, takrorlanish chastotasini va crash sodir bo‘lgan ilova versiyasini ko‘rsatadi.
// Android ilovasida Crashlytics ni ishga tushirish
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
FirebaseApp.initializeApp(this)
Crashlytics.setCustomKey("build_type", "production")
}
}
// Crash diagnostikasi uchun foydalanuvchi ma’lumotlarini sozlash
Crashlytics.setUserId("user_12345")
Crashlytics.setCustomKey("screen", "ProfileFragment")
Crashlytics.setCustomKey("api_response", responseCode)
// Integratsiyani test qilish uchun majburiy crash
Crashlytics.crash()
Sentry — batafsilroq diagnostika bilan muqobil yechim. Sentry nafaqat stack trace, balki barcha o‘zgaruvchilarning holatini, xatogacha bo‘lgan voqealar ketma-ketligini va ijro kontekstini ham ko‘rsatadi. Sentry-dagi Breadcrumbs fatal xatodan oldin foydalanuvchining harakatlar zanjirini tiklashga imkon beradi: tugma bosishlar, ekranlar orasidagi o‘tishlar, tarmoq so‘rovlari. Sentry-da sifatni kompleks tahlil qilish uchun samaradorlik va sessiyalar monitoringi mavjud.
iOS-da crashlarni to‘g‘ri aniqlash uchun Crashlytics yoki Sentry-ga dSYM fayllarini (debug symbols) yuklash talab qilinadi. dSYM bo‘lmasa, stack trace funksiya nomlari o‘rniga faqat xotira manzillarini o‘z ichiga oladi. Android uchun ProGuard yoki R8 dan foydalanishda mapping fayllarini yuklash talab qilinadi. Xcode-da build phase yoki Gradle plugin orqali dSYM yuklashni avtomatlashtirish ishlab chiqarish qurilmalari uchun majburiydir.
Asosiy oldini olish usuli — barcha optional va nullable qiymatlarning safe unwrapping i. Swift-da if-let va Kotlin-da ?: bilan let dan foydalanish null-pointer xatolarini bartaraf qiladi. Qiymat mavjudligiga kafolatsiz hech qanday force unwrap. Kotlin va Swift kompilyatorlari ikkalasi ham potensial xavfli operatsiyalar haqida ogohlantiradi — ishlab chiqarish kodida bu ogohlantirishlarni e’tiborsiz qoldirib bo‘lmaydi.
// Safe unwrapping orqali FATAL ERROR NI OLDINI OLISH
func processUser(id: String) -> String {
guard let user = database.findUser(by: id) else {
return "User not found"
}
guard let email = user.email else {
return "Email not set"
}
return email
}
// Kolleksiya elementlariga xavfsiz murojaat
func safeGet <T>(items: [T], index: Int) -> T? {
guard items.indices.contains(index) else { return nil }
return items[index]
}
// Murojaatdan oldin massiv chegaralarini tekshirish
let numbers = [1, 2, 3]
if numbers.indices.contains(5) {
print(numbers[5])
} else {
print("Index out of range")
}
Defensive programming — ikkinchi himoya darajasi. Har doim funksiyalarning kirish parametrlarini tekshiring, force unwrap o‘rniga Optional yoki Result qaytaring, ishlab chiqish bosqichida xatolarni erta aniqlash uchun debug qurilmalarida assert dan foydalaning. Chegara holatlari (null, bo‘sh kolleksiyalar, noto‘g‘ri indekslar) uchun birlik testlari ilova biznes mantiqining barcha ochiq kirish nuqtalarini qamrab olishi kerak.
React Native va SwiftUI-da error boundary o‘rnatish mumkin — render paytida fatal xatolarni tutadigan va crash o‘rniga zaxira interfeysni ko‘rsatadigan komponent. Bu foydalanuvchi tajribasi nuqtai nazaridan fatal UI xatosini non-fatalga aylantiradi — ilova ishlashda davom etadi va foydalanuvchi oq ekran o‘rniga interfeysning muayyan blokida xato xabarini ko‘radi.
CI/CD pipeline-iga avtomatik tekshiruvlarni integratsiyalash: statik tahlil (Kotlin uchun Detekt, Swift uchun SwiftLint), real qurilmalarda UI testlarini ishga tushirish, test muhitida crash-free rate ni tekshirish. Crash-rate chegarasidan oshganda mergeni bloklash (tavsiya etilgan chegara — commit boshiga 0.1% dan ortiq yangi crash).
Ko‘p beriladigan savollar
Yo‘q, fatal error dan keyin tiklanish mumkin emas — jarayon OT darajasida to‘xtatiladi. Yagona yo‘l — fatal xatoning yuz berishining oldini olish xavfsiz konstruksiyalar, defensive programming va ishlab chiqish bosqichida chegara holatlarini har tomonlama test qilish orqali.
Segfault (SIGSEGV) — ruxsat etilmagan xotira maydoniga murojaat qilishda yuzaga keladigan fatal error turlaridan biri. FATAL ERROR — segfault, abort, stack overflow, out of memory va runtime-da boshqarilmagan istisnolarni o‘z ichiga olgan barcha qaytarilmas xatolar uchun umumiy tushuncha.
Crashlytics (Firebase) yoki Sentry SDK integratsiyasi barcha boshqarilmagan istisnolarni avtomatik yig‘adi. SDK OT signallari va runtime istisnolarini tutadi, stack trace va kontekst bilan crash hisobotini yaratadi va ilovaning keyingi ishga tushirilishida serverga yuboradi.
Crashlarni boshqarishni test qilish uchun debug qurilmasida force crash dan foydalaniladi. Crashlytics fatal xatoni simulyatsiya qilish uchun crash() metodini taqdim etadi. Birlik testlarida guard va if-let ning to‘g‘riligi tekshiriladi, UI testlari esa ma’lumot kiritish va interfeys holatining chegara holatlarini qamrab oladi.
Yo‘q, faqat boshqarilmagan istisnolar fatal bo‘ladi. Try-catch bilan tutilgan istisno non-fataldir. Boshqarilgan va boshqarilmagan istisno o‘rtasidagi farq ilovaning yopilishi yoki foydalanuvchi tajribasiga minimal zarar bilan muqobil holatda ishlashda davom etishini aniqlaydi.
Xulosa
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.