App di debug all'avvio tramite notifica push


135

Attualmente sto sviluppando un'app che riceve notifiche push. Tutto questo funziona al 100% attraverso una pagina PHP. Esistono diversi tipi di notifiche push che la mia app può ricevere. Il PHP gestisce questo e invia diversi pacchetti di informazioni alla mia app che vengono tutti ricevuti bene.

Tuttavia, quando gli utenti "visualizzano" la notifica e la mia app si avvia, ovviamente voglio intraprendere un'azione diversa rispetto a quella che farebbe se l'utente avesse appena lanciato l'app manualmente - e, soprattutto, azioni diverse a seconda del tipo di notifica push. Ho funzionato bene ... strutturalmente.

Uno dei miei tipi push dovrebbe aprire un UIView che effettua diverse connessioni a più server diversi e negozia i dati avanti e indietro. Questa UIView funziona bene quando, ad esempio, viene attivata dal menu principale, tuttavia quando la mia notifica push sta attivando la visualizzazione di questa UIView, le connessioni socket non funzionano come previsto.

Ora la mia domanda non riguarda i socket, ma di più: come si fa a eseguire il debug di un simile problema ?? Da quello che posso dire (sono relativamente nuovo) quando l'app è stata lanciata da una notifica push non c'è modo di collegare tale esecuzione al debugger / console / ecc ... Sto avendo un momento molto difficile provare a eseguire il debug del codice usando UIAlertViews, in quanto vi sono molte linee di comunicazione avanti e indietro tra i vari server.

Qualsiasi consiglio che avresti per me sarebbe molto apprezzato.

Risposte:


147

In XCode <4.0 (per XCode> = 4, vedi la risposta di delirus di seguito), ora puoi configurare Xcode per collegare il debugger all'app dopo averlo lanciato, invece di avviare l'app tramite il debugger. Ciò consente di eseguire il debug di elementi che variano in base allo stato di avvio dell'applicazione, come schemi URL, pasteboard e notifiche push.

  1. In Xcode cerca nella barra Sorgente e sotto i Target ci saranno degli eseguibili.
  2. Apri l'ispettore per la tua app in file eseguibili.
  3. Fai clic sulla scheda Debug nella finestra di ispezione.
  4. Deseleziona "Avvia eseguibile dopo aver avviato il debugger"
  5. Controlla "Attendi il prossimo lancio / notifica push"

Ora quando fai clic sul debug da Xcode invece di avviare l'app, verrà visualizzata una finestra che dice che è in attesa dell'avvio dell'app. Avvia quindi l'app normalmente sul telefono e Xcode si collega ad essa


37
So che potrebbe non essere appropriato, ma ti amo. :)
Dutchie432,

17
Quando si avvia in questo modo, lo stdin, lo stdout e lo stderr dell'applicazione non vengono instradati nella console di GDB, ma vengono indicati dove si trovano in un normale avvio dell'app. Puoi vedere NSLog () nella console di sistema del dispositivo guardando il dispositivo nell'organizzatore.
Louis Gerbarg,

1
Mi hai insegnato alcuni punti molto preziosi qui. GRAZIE. Ho trascorso gli ultimi 2 giorni cercando di eseguire il debug di qualcosa che sono stato in grado di risolvere entro 20 minuti dal tuo post.
Dutchie432,

1
@stigi lavora nel simulatore per me per testare schemi URL. Sto usando xcode 4.5 se è importante
dreyln

1
@dreyln il mio commento è stato del 2009 :) molto è cambiato da allora. Ma grazie per il testa a testa!
stigi,

124

Per Xcode 4 devi:

  1. Modifica il tuo schema attivo tramite il menu a discesa "Schemi". ( + <)
  2. Quindi scegli il tuo prodotto: "Esegui MyApp.app" a sinistra.
  3. Seleziona la scheda "Informazioni" sulla destra.
  4. E infine scegli l'opzione "Attendi l'avvio di MyApp.app".

Maggiori informazioni qui nella sezione "Personalizza file eseguibili nell'editor di schemi".

EDIT:
Nel caso in cui manchi i log in GDB, vedi il commento di Louis Gerbarg alla sua risposta.


1
Sono con Xcode 4.2 per Lion e, sebbene l'app si stia avviando correttamente dallo schema URL e l'esecuzione del debugger non si fermi, la console non mostra nulla. Mi sto perdendo qualcosa?
LoDani,

@LoDani stesso qui, hai mai capito perché?
Davis

3
@LoDani, Davis G .: Hai visto il commento di Louis sulla risposta accettata? stackoverflow.com/questions/1239000/… Se avviato in questo modo, stdin / out / err non vengono reindirizzati nella console.
Ivan Vučica,

Grazie, mi hai salvato la giornata! Sto cercando di inchiodare un bug che si verifica solo quando la mia app viene avviata da un gestore di URL.
Eliot

@delirus - Grazie per aver aggiornato questo per XCode 4.
Dutchie432

112

Per XCode 10, 9, 8, 7 e 6:

  1. Seleziona lo schema sulla barra degli strumenti (appena a sinistra del dispositivo con cui esegui il debug)
  2. Scegli Modifica schema
  3. Seleziona Esegui nel riquadro di sinistra
  4. Per l' opzione Avvia , selezionare Attendi l' avvio del file eseguibile
  5. Chiudi l'Editor di schemi ed esegui il tuo progetto XCode

Ora puoi eseguire il debug all'avvio da una notifica, da un URL personalizzato o toccando l'icona dell'app.


9
Questa risposta mi ha causato molti problemi, anche se in genere mi ha messo sulla strada giusta. Il passaggio 3 è un po 'fuorviante. Devi farlo, ovviamente; seleziona Esegui nel riquadro di sinistra. Ma dovrebbe esserci anche un passaggio 5 con una formulazione concettuale molto simile: fare clic sul pulsante Esegui di xcode, prima di aspettarsi i risultati ... Dato che all'inizio non ha funzionato per me, ho chiesto consiglio ad altri colleghi ... hanno chiesto me se facessi la cosa di Run, alla quale rispondevo di sì, pensando all'opzione no. 3 ... Dovrebbe esserci davvero un passaggio 5 in questo ...
Florin Odagiu,

@FlorinOdagiu Buona chiamata. Aggiunto passaggio 5. Grazie!
bgolson,

Nel caso in cui Xcode ripristini una scheda di schema diversa, l'opzione Avvia si trova nella scheda Informazioni.
Nate Whittaker,

3
Non ottengo alcun output nella finestra del debugger quando avvio l'app manualmente.
dvdblk,

3

Non sto lavorando con le notifiche push, quindi non conosco il funzionamento esatto delle notifiche push. Tuttavia, proverei a imitare la ricezione di una notifica push lasciando che il metodo principale del tuo programma fingesse che sia stata pubblicata una notifica, o chiamando l'applicazione: didFinishLaunchingWithOptions: UIApplicationDelegate method dall'applicazioneDidFinishLaunching: method.

HTH - Saluti, Daan


Anche una buona idea, ma imitare è sempre il secondo migliore per il debug della cosa reale! Buona programmazione!
Dutchie432,

3

In Xcode 6:

  1. collega iPhone a Macbook con USB
  2. avvia l'app su iPhone toccando l'icona
  3. Nel menu di Xcode, Debug> Attach to Process> Scegli il tuo app

1
Non sarai in grado di eseguire il debug del percorso di avvio critico con questo approccio.
Zorayr,

2

Per XCode 11 e 10, è possibile effettuare le seguenti operazioni:

  1. Seleziona l'opzione Schema.
  2. Scegli Modifica schema.

  3. Seleziona l'opzione Esegui dal pannello di sinistra

  4. Nella parte di avvio, selezionare attendere l'avvio dell'eseguibile , quindi chiudere la finestra di dialogo.

  5. Costruisci ed esegui il progetto. Ora puoi avviare l'app toccando l'icona dell'app o toccando il messaggio di notifica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.