2011-12-13 10 views
15

Hello Overflow dello stack!Inclusione di dati personalizzati nei dump degli arresti anomali di iOS

Una semplice domanda per voi: è possibile incorporare i dati di errore personalizzate in incidente iOS generato automaticamente discariche ricevo dai miei utenti quando la mia applicazione si è schiantato sul proprio dispositivo?

Ad esempio: il mio database SQlite non funziona per qualche motivo (ad esempio, il file di database è danneggiato) .. Non riesco a recuperare da questo errore, quindi lancio un'eccezione e incorporo nell'eccezione l'errore sqlite dettagliato Messaggio. Il problema è che il crash dump dell'applicazione non conterrà il messaggio di eccezione, quindi non è facile sapere in quali condizioni l'applicazione si è bloccata.

Qualcuno sa un modo per inserire le cose nel rapporto di crash dump? O avete qualche altro modo consigliato di segnalare arresti di produzione allo sviluppatore?

Grazie!

risposta

29

No, non è possibile inserire i propri dati nei rapporti sugli arresti anomali. Inoltre, non è possibile accedere automaticamente ai rapporti sugli arresti anomali generati da iOS a causa della sandbox.

Quindi il mio suggerimento è la seguente:

  1. per la registrazione dei propri dati, utilizzare Cocoalumberjack. È molto più veloce di NSLog o di altri framework di registrazione e offre un'opzione per registrare i tuoi messaggi in un file. Ora, quando si verifica un'eccezione, o ogni volta che vuoi, registralo in un file. Ma se la tua app si arresta in modo anomalo nel punto in cui aggiungi qualcosa in un file di registro, molto probabilmente mancherà, poiché l'app si è arrestata nello stesso momento.

    Quindi è piuttosto impossibile catturare in modo sicuro l'istruzione SQL esatta. Ma il rapporto di incidente dovrebbe darti abbastanza informazioni per capire cosa sta succedendo, con l'aggiunta a ciò che hai registrato di essere fatto prima. Per esempio. è possibile registrare la stringa di ricerca utilizzata in modo SQL prima dell'esecuzione di SQL.

    In generale, provare a non registrare troppo.

  2. Per la cattura di segnalazione di crash si dovrebbe altro che una soluzione basata sul framework open source PLCrashReporter, che possono safely crash di cattura, anche quando si app è già in App Store! Si sconsiglia di fare eccezioni, controlla this article per capire perché!

    iTunes Connect ti consente di visualizzare anche alcuni rapporti sugli arresti anomali, ma ci vogliono fino a 2 settimane per visualizzarne alcuni, ma di gran lunga non tutti come ad es. sottolineato dallo Camera+ developers. Quindi è meglio usare la propria soluzione.

    PLCrashReporter ti invierà rapporti di crash standard in formato Apple, pronti per la simbolizzazione, in modo da sapere dove si verifica l'arresto anomalo nel codice, compresi i numeri di riga.

    Alcune soluzioni basate su PLCrashReporter sono:

    • QuincyKit: Open Client Fonte + di server PHP, crash del raggruppamento di base, symbolication possono essere automatizzati dal Mac (Io sono l'autore di questa)
    • HockeyApp: servizio a pagamento, usa il client QuincyKit, avanzata incidente raggruppamento, symbolication completamente fatto sul server (io sono su degli sviluppatori di questo)
    • Bugsense: servizio gratuito, symbolication annunciato come funzione Premium
    • AppBlade: Servizio a pagamento, symbolication sconosciuto
    • Crashlytics: beta privata, caratteristiche sconosciute, la soluzione sembra essere basata su PLCrashReporter
  3. Le soluzioni proposte né consentire l'invio automaticamente i dati al successivo avvio o chiedendo l'utente se accetta di inviare.

+0

Correzione minima: BugSense fornisce attualmente la simbolizzazione sul dispositivo. –

+1

Grazie Nick. Questo è nuovo perché oggi immagino :) Quindi questo significa senza numeri di riga e hai bisogno dei simboli nell'app binario? – Kerni

+0

Esattamente a destra :) La Symbolication è diventata disponibile quando ho rilevato lo sviluppo di iOS su BugSense, quindi è stato lì per un po '. Non funziona perfettamente e mancano i numeri di riga e le informazioni sul file. Recentemente ho scoperto che alcune build simbolizzano anche con alcune opzioni di "stripping" e sto cercando di capire perché sia ​​... –