- Published on
Firebase crashlytics: iOS ilovadagi xatoliklarni tutish va tahlil qilish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Nega Crashlytics eng muhim vositalardan biri?
Ilovangizni App Store'ga joylaganingizdan so'ng, foydalanuvchilar undan har xil qurilmalarda foydalanishadi. Ba'zan ilova kutilmaganda yopilib qolishi (crash) mumkin. Agar sizda Firebase Crashlytics bo'lmasa, qaysi qatorda va nima uchun xatolik yuz berganini hech qachon bila olmaysiz.
Crashlytics sizga quyidagilarni ko'rsatib beradi:
- Qaysi qurilmada va qaysi iOS versiyasida xatolik yuz berdi?
- Ilovaning aynan qaysi fayli va nechanchi qatorida kod ishlamay qoldi?
- Xatolikdan oldin foydalanuvchi qanday amallarni bajardi?
1. O'rnatish va dSYM fayllar
Crashlytics'ni sozlash ikki qadamdan iborat:
- Xcode'da
FirebaseCrashlyticspaketini qo'shish. - dSYM (Debug Symbols) fayllarini avtomatik yuklashni sozlash.
WARNING
dSYM fayllarisiz Firebase sizga xatolikni kompyuter tili (xotira manzillari: 0x10a2b...) ko'rinishida ko'rsatadi va siz xatoni qayerdan qidirishni bilolmaysiz. dSYM fayllari o'sha tushunarsiz kodni inson o'qiy oladigan (Masalan: CrashView.swift 28-qator) holatga o'girib beradi.
Avtomatik yuklashni sozlash:
- Xcode
Build Settingsbo'limidanDebug Information Formatni qidiring. - Ham Debug, ham Release uchun uni DWARF with dSYM File ga o'zgartiring.
Build Phasesbo'limida yangiRun Scriptqo'shing (Firebase taqdim etgan scriptni joylashtiring).
2. Foydalanuvchini identifikatsiya qilish
Crash hisobotlarida "Kimda xatolik yuz berdi?" degan savolga javob olish juda muhim. Tizimga kirgan foydalanuvchining ID sini Crashlytics'ga berib yuborishimiz mumkin:
import FirebaseCrashlytics
class CrashManager {
static let shared = CrashManager()
func setUserId(userId: String) {
Crashlytics.crashlytics().setUserID(userId)
}
}
Endi qachon xatolik yuz bersa, hisobotda o'sha foydalanuvchining ID si ham ko'rinadi.
3. Custom Keys va Logs (Qo'shimcha ma'lumotlar)
Xatolik sababini topish oson bo'lishi uchun, Crashlytics'ga qo'shimcha "kalitlar" va "loglar" (qadamlar) jo'natish mumkin.
Custom Keys (Kalitlar): Masalan, foydalanuvchi "Premium" obunaga egami yoki yo'qligini saqlash:
func setPremiumValue(isPremium: Bool) {
Crashlytics.crashlytics().setCustomValue(isPremium.description, forKey: "user_is_premium")
}
Logs (Qadamlar tarixi): Foydalanuvchi aynan nimalar qilganini (qaysi tugmalarni bosganini) yozib borish:
func logEvent(message: String) {
Crashlytics.crashlytics().log(message)
}
// Ishlatish:
CrashManager.shared.logEvent("Sozlamalar sahifasi ochildi")
CrashManager.shared.logEvent("Chiqish tugmasi bosildi")
// Agar shundan so'ng crash yuz bersa, bu 2 log hisobotda aniq ko'rinadi.
4. Ilovani yopib qo'ymaydigan xatoliklar (Non-Fatal Errors)
Ba'zan bizda shunday xatolar bo'ladiki, ular ilovani yopib qo'ymaydi, lekin baribir "yomon" holat hisoblanadi (masalan, API dan noto'g'ri ma'lumot kelishi yoki rasm yuklanmay qolishi).
Bunday holatlarni biz Non-Fatal Error sifatida jo'natishimiz mumkin:
func sendNonFatalError(error: Error) {
Crashlytics.crashlytics().record(error: error)
}
Bu xatolar Firebase'da alohida belgi bilan ajratib ko'rsatiladi va siz muammoni sezdirmasdan hal qilishingiz mumkin.
Firebase Console'da xatolarni kuzatish
Firebase dagi Crashlytics bo'limi sizga "Crash-free users" (Xatolikka duch kelmagan foydalanuvchilar foizi) statistikasini ko'rsatadi. Maqsad — bu ko'rsatkichni 99.9% da ushlab turishdir!
Shuningdek, xatolikni tuzatganingizdan so'ng uni "Yopish" (Close) tugmasini bosishingiz mumkin. Agar keyingi versiyalarda bu xatolik yana paydo bo'lsa, Firebase sizni "Regression" (Muammo qaytdi) deb ogohlantiradi.