2009-12-15 11 views
16

Non mi piace usare la finestra di output della console Xcode quando eseguo il debug di un'app per iPhone nel simulatore (o su un dispositivo per questo). Mi piacerebbe essere in grado di utilizzare la toolbox Unix e fare cose come filtrare l'output di registrazione con grep. Ma per fare questo ho bisogno di ottenere Xcode per inviare l'output di registrazione per l'applicazione iPhone in esecuzione al terminale.Riesci a reindirizzare l'output del registro della console Xcode sul terminale quando esegui iPhone Simulator?

C'è qualche modo per realizzare questo?

+2

buona domanda. questo non mi ha infastidito fino a questo momento. – pestilence669

+0

Ho trovato la risposta alla mia domanda. È su http://www.cocoadev.com/index.pl?NSLogToFile e nel commento che inizia "Ancora meglio, evita i C array potenzialmente in eccesso e usa la bontà del cacao ..." – dan

+0

Grazie per il link dan. Penso che questa sia la vera risposta. – phatblat

risposta

4

Impossibile dire come funzionerebbe nel simulatore, ma il reindirizzamento dello stdout non è molto difficile. Diciamo che voleva il tubo nel vostro punto di vista:

#include <unistd.h> 

stderr->_write = RedirectOutputToView; 
stdout->_write = RedirectOutputToView; 

e utilizzare il prototipo:

int RedirectOutputToView(void *inFD, const char *buffer, int size); 
+2

So come reindirizzare lo stdout. Devo solo sapere come ottenere un'app per iPhone in esecuzione in modalità debug in XCode per l'output su stdout del terminale. – dan

+0

Grazie, ma ci deve essere un modo più semplice per farlo. Ad esempio, se esistesse un modo (di cui non sono a conoscenza) per avviare l'app per iPhone nell'iPhoneSimulator direttamente dal Terminale, presumibilmente l'output di registrazione verrà visualizzato nella finestra Terminale da cui è stata avviata l'app. – dan

+0

Quindi reindirizzare a un file ed eseguire tail -f su quello. Se Terminal ha uno stdout, non puoi scrivere ad esso dal di fuori del suo spazio indirizzo. –

2

ho trovato il this answer a lavorare bene per il mio scopo, anche se richiede l'esecuzione del simulatore al fine di lo streaming dal vivo in un terminale:

ho tolto il controllo del simulatore e ha aggiunto una dichiarazione NSLog poco prima del reindirizzamento in modo che la console XCode sputa fuori la posizione del file:

Penso che la soluzione più solida sarebbe utilizzare una libreria di registrazione (ad es. CocoaLumberjack ) e configurarlo con qualsiasi destinazione tu voglia.

5

In XCode 6, i registri sono pippati qui: /Users/<username>/Library/Logs/CoreSimulator/<app guid>/system.log. nome utente è ovviamente il nome utente del sistema e guid app è qualcosa che XCode genera per il simulatore.

Il modo più semplice per determinare ciò che l'applicazione guid è, è quello di costruire la vostra applicazione per il simulatore e vedere quale directory è stata Modificato il:

~ ❯❯❯ cd ~/Library/Logs/CoreSimulator 
~/L/L/CoreSimulator ❯❯❯ ls -latr 
total 64 
-rw-r--r-- 1 x staff 519 27 Aug 21:54 iOS Simulator.log 
drwxr-xr-x 13 x staff 442 27 Aug 21:54 D283605A-0BA9-43B3-AB6B-F4858BE6E45E 
drwxr-xr-x 15 x staff 510 8 Oct 03:56 425D8E41-0842-4F2D-BC22-8C3695E350EF 

Chiaramente 425D8E41-0842-4F2D-BC22- 8C3695E350EF è l'ultima directory modificata, quindi ora puoi fare tail -f ~/Library/Logs/CoreSimulator/425D8E41-0842-4F2D-BC22-8C3695E350EF/system.log | grep keyword o qualsiasi altra cosa tu voglia fare con il live log.

+1

La migliore risposta. Btw XCode 7 fa lo stesso – snayde

1

Posso ottenere l'uscita del dispositivo in un terminale ma non sono stato in grado di connettere una sessione di debug in xcode contemporaneamente (suppongo che il terminale abbia una connessione di debug).

Avviare l'app da un terminale utilizzando idevicedebug.

idevicedebug -u <device uuid> run com.myco.apps.myapp 

Dove com.myco.apps.myapp è l'ID pacchetto che può essere visto nel riquadro '' app installate nella finestra dispositivi.

Io penso idevicedebug viene installato con ideviceinstaller e può essere fatto con birra

brew install ideviceinstaller 

ma mi raccomando alla ricerca di ideviceinstaller e libimobiledevice (la libreria che questo usa) solo per essere sicuri.

È un piccolo fastidio, ma il modo migliore che ho trovato per ottenere l'uscita del programma in un terminale.

0

In Xcode 6 lo fa già. Aprire il file System.log associato alla build dei simulatori attualmente in uso. Per me è qui: /Users/josh.lang/Library/Logs/CoreSimulator/3BB4CBFB-5A67-4E93-91B5-78E6E3658A16/system.log

Manterrà tutto, ma ho notato se l'ho aperto mentre la mia sim è in esecuzione, si ricarica anche da solo.

0

Perché non usare Console.app? Un bel modo per visualizzare e registri grep, invece della finestra di debug o del terminale di xCode. Questo è parte di macOS per impostazione predefinita.

enter image description here

Se si dispone di C istruzioni printf allora la seguente ha così un sacco di informazioni utili: Get printf on Console.app

Problemi correlati