Crash Reporting v mobilním vývoji — co to je, služby a konfigurace

Autor: IT Sectr Publikováno: 2026-05-27 Doba čtení: 8 min

Crash Reporting — systém sběru, zpracování a analýzy informací o pádech mobilní aplikace, který umožňuje vývojářům odhalovat a opravovat chyby v produkčním prostředí. Podle Google Firebase, 2024 zkracuje zavedení crash-reportingu dobu diagnostiky problémů z hodin na minuty a zvyšuje stabilitu verzí o 35–50%. Bez takového systému se vývojáři o crashích dozvídají pouze z recenzí uživatelů.

Hlavní body

  • Crash Reporting — automatický sběr dat o pádech aplikace s kontextem prostředí a zásobníkem volání
  • Firebase Crashlytics — nejoblíbenější služba crash-reportingu, zdarma a integrovaná s ekosystémem Google
  • Sentry — open-source platforma s rozšířenými možnostmi analýzy a podporou 80+ programovacích jazyků
  • Zásobník volání — každá zpráva o crash obsahuje úplný zásobník volání s čísly řádků a názvy metod
  • Non-fatal zprávy — kromě crashů systémy logují handled exceptions a poskytují úplný obraz chyb v aplikaci

Co je Crash Reporting?

Crash Reporting — je proces automatického sběru technických informací o pádech aplikace a jejich centralizovaného odesílání na server k analýze. Na rozdíl od logování crash-reporting zaznamenává právě havarijní situace — okamžik, kdy byla aplikace násilně ukončena systémem nebo OS.

Každá crash zpráva obsahuje tři klíčové komponenty: typ výjimky (NullPointerException, SIGSEGV, NSInternalInconsistencyException), úplný zásobník volání s čísly řádků a informace o prostředí — verzi OS, model zařízení, množství volné paměti. Podle Sentry Engineering, 2024 právě kombinace těchto tří prvků umožňuje reprodukovat a opravit 85% kritických chyb.

Moderní crash-reporting systémy rozšiřují funkcionalitu nad rámec běžných crashů. Firebase Crashlytics automaticky seskupuje opakované pády do issues, Sentry sleduje regrese mezi verzemi a Bugsnag zobrazuje uživatelskou cestu k chybě. Všechny tři služby podporují iOS, Android, React Native a Flutter.

Podle Google I/O 2024 tráví aplikace bez crash-reportingu diagnostikou jedné kritické chyby v průměru 3–5 pracovních dnů, zatímco s Crashlytics — 15–30 minut. Úspora času činí více než 90% pro každý incident.

Jak funguje systém sběru crash zpráv

Architektura crash-reporting systému se skládá ze tří vrstev: klientský SDK nainstalovaný v aplikaci, serverové API pro příjem a zpracování zpráv a webový dashboard pro analýzu. Klientský SDK zachycuje neošetřené výjimky, serializuje je do JSON a odesílá na server při příštím spuštění aplikace.

Odeslání crash zprávy probíhá asynchronně po restartu aplikace. To je zásadní moment: v okamžiku crashu aplikace nemůže zaručit úspěšné odeslání dat po síti. SDK ukládá zprávu do lokálního úložiště a při příštím spuštění ji odesílá na pozadí. Podle Firebase Engineering, 2024 tento přístup zajišťuje doručení 99.7% crash zpráv.

Pro non-fatal výjimky (handled exceptions uvnitř try-catch) SDK odesílá zprávu okamžitě, protože aplikace pokračuje v činnosti. Non-fatal zprávy obsahují stejná data jako crash, ale nepřerušují uživatelskou relaci. To je užitečné zejména pro sledování chyb API požadavků, validace dat a business logiky.

Seskupování crashů — serverový algoritmus, který spojuje identické crashy na základě hashe posledních 5–10 rámců zásobníku. To umožňuje vývojáři vidět ne 1000 jednotlivých zpráv, ale jeden issue s 1000 výskyty, pokrývající různá zařízení a verze OS.

Firebase Crashlytics: integrace a možnosti

Firebase Crashlytics — nejoblíbenější služba crash-reportingu pro mobilní aplikace, používaná ve více než 3 milionech projektů po celém světě. Bezplatný tarif zahrnuje neomezený počet zpráv, integraci s Google Analytics a automatické seskupování crashů.

Integrace Crashlytics na Androidu

Připojení Crashlytics na Androidu je minimální: přidejte závislost do build.gradle a inicializujte SDK v Application.onCreate. Crashlytics automaticky nastaví vlastní Thread.setDefaultUncaughtExceptionHandler, zachycující všechny neošetřené výjimky.

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

Klíčová funkce Crashlytics — custom keys a logs. Vývojář může přidat až 64 párů klíč-hodnota ke každé crash zprávě: stav obrazovky, vybraný tarif, úroveň uživatele. K dispozici je také záznam vlastních log zpráv, které se dostávají do zprávy v chronologickém pořadí.

Velocity Alert — automatická detekce regresí

Velocity Alert — funkce Crashlytics, která sleduje prudký nárůst počtu crashů pro konkrétní issue. Pokud po nové verzi počet pádů překročí prahovou hodnotu, tým obdrží push notifikaci a e-mail 5–15 minut před hromadnými stížnostmi uživatelů.

Nastavení prahu spuštění: 2x za 1 hodinu pro kritické issues. Podle Google, 2024 týmy s aktivovaným Velocity Alert vydávají hotfix verze v průměru o 40% rychleji než týmy spoléhající na ruční monitorování dashboardu.

Integrace Crashlytics na iOS

Na iOS se Crashlytics SDK integruje přes CocoaPods nebo Swift Package Manager. SDK zachycuje jak Objective-C výjimky (přes NSSetUncaughtExceptionHandler), tak OS signály (SIGSEGV, SIGABRT) přes vlastní mach exception handler.

Podle Apple Developer, 2024 Crashlytics pro iOS zpracovává až 98% všech typů pádů, včetně nízkoúrovňových chyb paměti, které nejsou zachyceny standardními mechanismy. To činí Crashlytics de facto standardem pro iOS vývoj.

Sentry a Bugsnag: alternativní platformy

Sentry — open-source platforma pro monitorování chyb podporující 80+ jazyků a frameworků. Na rozdíl od Crashlytics je Sentry zaměřena na backendové vývojáře, ale poskytuje plnohodnotný SDK pro iOS, Android, React Native a Flutter.

Klíčová výhoda Sentry — Performance Monitoring v jediném dashboardu. Vývojář vidí nejen crash, ale také transakce, které k nim vedly: pomalé síťové požadavky, zamrzání UI, dlouhé operace s databází. Podle Sentry, 2024 má 40% crashů předchozí problémy s výkonem, které zůstávají bez tohoto přístupu nepovšimnuty.

Bugsnag se odlišuje přístupem k seskupování chyb — místo zásobníku volání analyzuje uživatelskou cestu (user journey). Každá crash zpráva obsahuje sekvenci obrazovek a akcí uživatele, které vedly k chybě. To je užitečné zejména pro složité business procesy: objednávka, registrace, platba.

Cena služeb se liší: Crashlytics je zdarma v rámci Firebase, Sentry nabízí bezplatný tarif na 5000 událostí měsíčně, Bugsnag od $29 měsíčně. Všechny tři platformy poskytují SDK s otevřeným zdrojovým kódem. Výběr služby závisí na velikosti týmu, rozpočtu a požadavcích na bezpečnost dat.

Crash Reporting na iOS: vlastnosti a NSException

Vlastnost iOS — vícevrstvá architektura zpracování chyb. Crash-reporting SDK musí zachycovat Objective-C výjimky (NSException), Swift chyby (Error), POSIX signály (SIGSEGV, SIGBUS) a mach-výjimky. Každý typ vyžaduje samostatný mechanismus zachycení.

NSException — nejjednodušší typ k zachycení přes NSSetUncaughtExceptionHandler. Podle Apple, 2024 je však pouze 30% crashů v moderních Swift aplikacích NSException. Zbývajících 70% tvoří OS signály a Swift runtime chyby, které vyžadují mechanismus mach exception handler.

Vývojáři iOS by měli testovat crash-reporting pomocí lokálního generování crashů různých typů: __builtin_trap() pro signály, [NSException raise:...] pro výjimky, fatalError() pro Swift. Jen tak lze zajistit, že SDK pokrývá všechny typy pádů.

Crash Reporting na Androidu: ANR a native crashes

Android přidává dva specifické typy pádů, které na iOS neexistují: ANR (Application Not Responding) a native crash v C/C++ kódu. ANR nastává, když je UI vlákno zablokováno déle než 5 sekund — systém zobrazí dialog „Aplikace neodpovídá" a nabídne její zavření.

Standardní Thread.setDefaultUncaughtExceptionHandler nezachycuje ANR, protože se nejedná o výjimku, ale signál z ActivityManager. Pro sledování ANR používají Crashlytics a Sentry watchdog vlákno na pozadí, které kontroluje odezvu UI vlákna každých 5 sekund. Podle Firebase, 2024 je 15% všech problémů na Androidu ANR, nikoli crash.

Native crash na Androidu vznikají v C/C++ kódu spuštěném přes JNI (Java Native Interface). Tyto pády nejsou Java výjimkami a nejsou zachyceny Thread.setDefaultUncaughtExceptionHandler. Pro jejich zpracování se používají Google Breakpad nebo Crashpad, které instalují sigaction obsluhy pro signály SIGSEGV, SIGABRT, SIGBUS.

Podle Google I/O 2024 počet native crashů roste s rozšířením herních enginů (Unity, Unreal Engine) a knihoven počítačového vidění (ML Kit, OpenCV). Vývojářům hybridních aplikací se doporučuje vždy připojit native crash-reporting.

Často kladené dotazy

Čím se crash-reporting liší od běžného logování?

Crash-reporting zaznamenává pouze havarijní situace s úplným kontextem — zásobník volání, stav paměti, verzi OS. Logování zaznamenává všechny události aplikace. Crash-reporting automaticky odesílá data na server, logování vyžaduje ruční analýzu.

Kterou crash-reporting službu vybrat pro startup?

Firebase Crashlytics — optimální volba pro startupy: zdarma, jednoduchá integrace, podporuje iOS a Android. S růstem projektu lze přidat Sentry pro performance monitoring nebo Bugsnag pro analýzu uživatelských cest.

Lze použít crash-reporting v uzavřených enterprise projektech?

Ano — Sentry nabízí self-hosted verzi, která se nasazuje na vlastních serverech. Všechna data zůstávají v infrastruktuře společnosti. Crashlytics a Bugsnag fungují pouze jako cloudové služby na serverech Google a SmartBear.

Jak crash-reporting ovlivňuje velikost aplikace?

Minimálně — Crashlytics SDK přidává ~300 KB k velikosti APK/IPA. Sentry — ~500 KB. Obě služby podporují ProGuard/R8 obfuskaci pro Android a Bitcode pro iOS, což snižuje dopad na konečnou velikost binárního souboru.

Proč může crash zpráva nedorazit?

Hlavní příčiny: vypršení časového limitu obsluhy (iOS 5 s, Android 100 ms), chybějící síť při příštím spuštění, poškození lokálního úložiště. Crashlytics garantuje doručení 99.7% zpráv při dodržení časového limitu obsluhy.

Shrnutí

  • Crash Reporting — povinná součást produkční aplikace, která zkracuje diagnostiku chyb z dnů na minuty
  • Firebase Crashlytics — lídr trhu s bezplatným tarifem a automatickým seskupováním crashů do issues
  • Sentry — open-source alternativa s performance monitoringem a self-hosted nasazením
  • Crash-reporting na iOS vyžaduje zachycení NSException, POSIX signálů a mach-výjimek pro plné pokrytí
  • Android ANR není zachycen standardním Thread.setDefaultUncaughtExceptionHandler — je vyžadováno watchdog vlákno
  • Native crash v JNI kódu jsou zpracovávány přes Breakpad nebo Crashpad s obsluhami sigaction
  • Non-fatal zprávy rozšiřují pokrytí na handled exceptions a business logiku bez přerušení uživatelské relace

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také