Firebase Crashlytics: monitorare crash
Crashlytics e lo strumento di monitoraggio crash di Firebase: cattura crash nativi e Dart, raggruppa stack trace simili, mostra trend per versione e dispositivo. E essenziale per qualunque app pubblicata in produzione: senza un sistema di crash reporting non si puo davvero garantire qualità.
Setup base
Su Android aggiungi il plugin gradle Crashlytics e il modulo Firebase Crashlytics. Su iOS aggiungi il pod FirebaseCrashlytics e configura una run script in Xcode per caricare i dSYM. Per Flutter usa il pacchetto firebase_crashlytics e configura l'upload simboli con il plugin nativo.
Simbolizzazione
Senza simboli, gli stack trace mostrano solo indirizzi di memoria. Su iOS i dSYM vanno caricati automaticamente tramite la build phase o manualmente. Su Android attiva ProGuard / R8 e configura il mapping upload con il plugin. Senza simbolizzazione non puoi capire dove avviene il crash.
Log custom e breadcrumb
Aggiungi log testuali, eventi custom e set di user identifier non personali per ricostruire il contesto al momento del crash. Crashlytics conserva fino a 64 KB di log per crash. Ricorda di non includere dati personali (email, numeri telefonici).
Custom keys e log
Crashlytics permette di aggiungere custom keys (user role, screen attuale, esperimento attivo) e log testuali (breadcrumb). Limita a 64 KB totali per crash. Non includere PII (email, telefono, CF). Documenta gli ID che usi per rapida correlazione con dati di backend.
Non-fatal e errori gestiti
Oltre ai crash, Crashlytics raccoglie non-fatal errors via recordError. Usali per errori gestiti (parsing fallito, timeout di rete che non causa crash) che meritano monitoring. Permette di scoprire problemi silenziosi che impattano UX senza causare crash visibili.
Velocity alert
Velocity alert notifica via email/Slack quando una nuova versione introduce crash che colpiscono >1% degli utenti in poche ore. Critico per rilasci percentage rollout: ti permette di fermare il rollout prima che la nuova versione raggiunga il 100%.
Integrazione con Jira/Linear
Connect Crashlytics a Jira/Linear/Asana per creare automaticamente issue dai crash più frequenti. Workflow tipico: triage settimanale, top 5 crash convertiti in ticket, assegnazione, fix, verifica chiusura. Riduce il tempo di reazione e mantiene la backlog ordinata.
NDK e crash nativi
Per app con codice nativo C/C++, Crashlytics NDK cattura crash native con simbolizzazione automatica. Setup richiede plugin gradle Crashlytics NDK e upload dei symbol files. Strumento essenziale per giochi e app con motore custom. Senza NDK support, i crash nativi appaiono come NullPointerException criptici.
BigQuery export
Crashlytics esporta gratis su BigQuery (richiede Blaze plan). Permette query SQL su crash storici, joins con dati di product analytics, analisi per device specifico, sessione, esperimento. Per team data-driven, BigQuery export di Crashlytics moltiplica il valore informativo dei dati di stabilita.
Procedura passo-passo
- Aggiungi Crashlytics al progetto e configura i plugin.
- Verifica l'upload automatico dei simboli (dSYM e mapping ProGuard).
- Forza un crash di test (Crashlytics.crash()) per verificare l'invio.
- Configura alert via email o Slack per nuove crash con impatto.
- Aggiungi log custom nei flussi critici (checkout, login).
- Imposta una soglia di rilascio (es. crash-free > 99,5%).
- Rivedi i crash settimanalmente in team e prioritizza i fix.
Workflow Slack integration
Configura Slack alert da Crashlytics: nuovi crash, velocity alerts, regression. Channel dedicato (#mobile-crashes) con webhook che notifica il team. Alert per priority: P0 con tag @here, P1 con notifica al lead, P2 settimanale digest. Riduce time-to-detection da ore a minuti. Combinabile con PagerDuty per on-call durante release critiche.
Regression detection
Crashlytics mostra "Closed issues" che si riaprono in nuove release: regression. Strumento prezioso per individuare bug che pensavi fissati. Investiga sempre regressioni: significano test gap o codice che dipende da edge case non riprodotti. Aggiorna i test di regressione automatici per coprire questi scenari prima del prossimo rilascio.
Errori comuni e come risolverli
- dSYM mancanti: usa Fastlane o Xcode Cloud per upload automatico.
- Mapping ProGuard non caricato: verifica la pipeline CI.
- Crashlytics non inizializza: assicurati che FirebaseApp.configure() venga chiamato.
- Troppi log: filtra ai soli flussi critici per non superare il limite.
- Crash duplicati: usa setCustomKey per disambiguare versioni e ambienti.
Domande frequenti
D: Crashlytics e gratuito?
R: Si, anche sul piano Spark senza quote.
D: Funziona offline?
R: Si, salva il crash in locale e lo invia alla prima connessione.
D: Posso usare Crashlytics con Sentry?
R: Si, ma rischi duplicazione. Meglio uno solo come fonte primaria.
D: Crashlytics e App Center coexistono?
R: Si tecnicamente, ma e ridondante. Scegli uno come fonte primaria. App Center sta venendo deprecato.
Cultura della qualità
Crashlytics non e solo strumento ma cultura: il team prende ownership della stabilita, ogni release ha target metrics, regressioni sono prevenute con discipline. Combinato con incident review e post-mortem, costruisce team mobile maturi che producono software di qualità superiore nel tempo.
La combinazione di Crashlytics con BigQuery export apre possibilità avanzate: analisi di crash patterns per device specifico, correlation con event di product analytics, dashboard custom su Looker Studio. Per team data-driven, questa integrazione fornisce visibilità molto più profonda rispetto al solo dashboard standard di Firebase Console.
Hai bisogno di aiuto?
Se vuoi sviluppare la tua app con G Tech Group, scrivici tramite il modulo di contatto.