2012-08-30 2 views
13

Usiamo TestFlight per inviare i piloti della nostra app.Solo crash su Testflight

C'è una parte dell'app che si sta bloccando e abbiamo avuto molti problemi a riprodurre l'arresto. Il codice è abbastanza semplice.

Si scopre che gli utenti che hanno ottenuto l'App tramite TestFlight si arrestano in modo anomalo, mentre se si crea l'app e la si installa tramite l'IDE non si arresta in modo anomalo!

Qualcuno ha idee su cosa potrebbe causare questo?

Qualche idea per soluzioni alternative? Non vogliamo smettere di usare TestFlight.

+0

ci sono informazioni sulle aree di supporto testflight? – Jessedc

+0

interessante, non ha mai avuto quel problema nelle distribuzioni pilota con testflight. stai usando qualche API testflight nel tuo codice, come i checkpoint o qualcosa del genere? – NDY

+3

Assicurati di creare l'app in modalità di rilascio sul computer e non su Debug. Potrebbe solo bloccarsi in modalità Release –

risposta

10

Assicurati di creare l'app in Modalità di rilascio non in Debug. L'app potrebbe bloccarsi solo quando in Release.

+0

che aiuta a usare il mio dispositivo invece di testflight ma come risolvere questo problema? – Dude

5

La prima cosa che vorrei provare è mappare la traccia dello stack di arresto anomalo ai nomi di funzioni nell'applicazione. Ciò può fornire informazioni utili sulla natura dello schianto:

  1. Non appena viene segnalato un arresto anomalo, richiedere il registro degli arresti anomali. Questo può essere ottenuto tramite l'organizzatore di Xcode o se questa non è un'opzione può essere catturato dallo schermo dalle impostazioni dell'iPhone -> Generale -> Informazioni -> Diagnostica & Utilizzo -> Diagnostica & Dati di utilizzo. Scorri fino al nome dell'app o alla sezione LatestCrash-AppName.plist.
  2. Anche se in teoria è possibile simbolizzare un arresto anomalo, trovo la procedura descritta di seguito in modo infallibile per ottenere i simboli dallo stack. Converti tutti gli indirizzi di stack per il thread in crash nei nomi dei metodi.
  3. Richiedere facoltativamente il syslog di iDevice. Questo può includere messaggi di errore di asserzione che sono anche inestimabili. Si noti che questo dovrebbe essere fatto il più rapidamente possibile in quanto il syslog contiene solo tante voci prima che vengano eliminate. È possibile utilizzare l'organizzatore o la riga cmd idevicesyslog per ottenere ciò.

Simbolizzazione manuale: Questo funzionerà finché le build hanno informazioni di debug.

  1. Ottenere lo _exact_same_ .ipa che si è arrestato in modo anomalo. Se non lo hai salvato, puoi scaricarlo dal dispositivo usando iFunBox o la utility cmd line ideviceinstaller.
  2. Decomprimere il .ipa
  3. Eseguire il seguente comando sul file eseguibile (Payload/AppName.app/AppName):

    otool -tv AppName.app | C++ filt> listing.asm

  4. Attendere il completamento del passaggio precedente (potrebbe richiedere un po 'di tempo). Il file list.asm generato sarà lungo diversi megabyte.

  5. Utilizzando un editor in grado di gestire file di grandi dimensioni, cercare list.asm per gli indirizzi elencati nello stack trace. Si noti che gli indirizzi potrebbero essere pochi byte disattivati ​​(di solito indicando 3 o più byte in anticipo). Inoltre, gli indirizzi che non si trovano in listing.asm indicano indirizzi nelle librerie iOS. Ignora quelli per ora.

Naturalmente, se è possibile simbolizzare, è possibile saltare questa procedura.

Buona fortuna debugging!

+0

Ehi, stiamo già simbolizzando tramite Testflight - caricamento del dSYM – daidai

+0

Cosa dice la traccia dello stack simbolizzato del thread che si blocca? Questa è una informazione d'oro. – Blanka

0

Abbiamo avuto un problema simile. Il problema con noi era librerie statiche.Quando abbiamo creato l'app da zero e siamo andati su testflight, si è verificato un arresto anomalo, ma dall'IDE non lo era. Il crash era dovuto al fatto che le librerie statiche non venivano incluse durante la compilazione, ma venivano incluse se collegavo l'iPad direttamente e usavo XCode per l'installazione.

Un semplice test si rivelerà questo: -

1.) Invece di costruire da IDE, creare un file .app e poi caricarlo tramite iTunes e verificare se si stanno ottenendo l'incidente.

Abbiamo lavorato attorno a questo creando l'.iPA manualmente, ovvero creando l'applicazione .app quindi creando una cartella Payload e inserendo l'applicazione .app insieme a info.plist.

Poi le cose hanno iniziato a funzionare anche in Testflight.

+0

stai usando uno script di build automatico? Penso di avere un problema simile – alemangui

+0

No, non stavamo usando uno script di build automatico. L'errore era strano anche a noi, ma dopo aver ottenuto la soluzione per tutte le nostre build di testflight con librerie statiche, abbiamo utilizzato il metodo sopra riportato. – VikrantY