iOS 10 non stampa NSLogs


88

Non viene stampato nulla da NSLogXcode 8.0 beta (8S128d). printfè invariato

Ecco il mio codice:

NSLog(@"hello from NSLog");
printf("hello from printf");

Ecco l'output su iOS 9 Simulator:

2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf

Ecco l'output su iOS 10 Simulator:

hello from printf

Ho avuto un problema simile. Ma in iOS 8.1, Xcode 8. Ho controllato tutte le risposte qui. È venuto fuori che stavo facendo tutto correttamente. Niente ha davvero aiutato. Quindi, ho spento il dispositivo e l'ho acceso. Funziona. Ho scritto questo commento qui in modo che possa aiutare altri ad affrontare un problema simile
KrishnaCA

Risposte:


229

Potrebbe essere che hai aggiunto la proprietà "OS_ACTIVITY_MODE": "disable" nelle variabili d'ambiente Scheme (per nascondere l'output del sistema operativo dal simulatore) e te ne sei dimenticato, e ora stai girando su un dispositivo reale.

In Xcode 8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

Aggiungi OS_ACTIVITY_MODEe seleziona (Non aggiungere un valore)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Riepilogo: questo è un bug di Xcode 8 + iOS10, possiamo risolverlo in questo modo:

  • Quando si utilizza il simulatore, aggiungere il nome "OS_ACTIVITY_MODE" e il valore "disable" e controllarlo.

  • Quando su un dispositivo reale, aggiungi solo "OS_ACTIVITY_MODE" e seleziona (Non aggiungere il valore). Vedrai NSLog nella console Xcode8.


4
> "Non aggiungere il valore" L'ho impostato su "disabilita" e funziona! Il campo vuoto non funziona per me.
m8labs

Sei sicuro che funzioni durante il debug del dispositivo iPhone reale, non del simulatore? Se lo imposto su "disable", la console non può NSLog durante il debug dell'iphone reale.
user6833743

Ho controllato ora senza "disabilitare", funziona sul dispositivo ora, ma non funziona sul simulatore, ora mostra di nuovo tutto ...
m8labs

2
c'è comunque per automatizzare questo processo? è davvero davvero fastidioso che dobbiamo ricordarci di andare avanti e indietro in questo modo: /
serra

2
Questa soluzione nasconderà tutti gli NSLog a partire da Xcode 9. Per mantenere NSLog, sostituire disablecon default.
Cœur

27

Se controlli le note sulla versione beta di Xcode 8 , scoprirai che dice:

Durante il debug di un'app in esecuzione su Simulator, i log potrebbero non essere visibili nella console. Soluzione alternativa: utilizzare il comando + / in Simulator.app per aprire il registro di sistema nell'app Console per visualizzare NSLog. (26457535)


9
Non riesco nemmeno a vedere l'output di NSLog nel dispositivo iOS 10 reale. Se stai utilizzando dispositivi reali, puoi aprire la finestra Dispositivi (Maiusc + Comando + 2) e vedere lì i registri dei dispositivi, ma è difficile guardare il registro delle app di debug perché la console mostra tutti i registri del sistema e delle app.
kientux

19

l'NSlog o print viene effettivamente eseguito ma è nascosto tra molti altri output di debug della console per risolvere questo problema Apri Xcode8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

aggiungi "OS_ACTIVITY_MODE" e imposta il valore su "disabilita" e selezionalo.

fare clic su chiudi

xcode9

aggiungi "OS_ACTIVITY_MODE" e imposta il valore su "predefinito" e selezionalo.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


Questo non funziona per me. I log NS non vengono visualizzati per le applicazioni distribuite. Uso xcode 8.1 (in esecuzione su Mac 10.11) con il dispositivo iOS 10.
mobjug il

21
Questa soluzione nasconderà tutti gli NSLog a partire da Xcode 9. Per mantenere NSLog, sostituire disablecon default.
Cœur

3
Questa risposta dovrebbe essere aggiornata per tenere conto della correzione di @ Cœur per Xcode 9.
Joel

7

Non riesco nemmeno a vedere l'output di NSLog nel dispositivo iOS 10 reale. Se stai utilizzando dispositivi reali, puoi aprire la finestra Dispositivi da Xcode (Maiusc + Comando + 2) e vedere lì i registri del dispositivo, ma è difficile guardare i registri della tua app perché la console mostra i registri del sistema e di tutte le app.

(Sto usando Xcode 7, quindi potrebbe non essere un problema di Xcode ma un problema di iOS 10)


Non vedo gli NSLogs per la mia app nella finestra dei dispositivi sotto iOS 10 GM ... hai lo stesso problema?
TahoeWolverine

Riesco a vedere i log in Xcode 7 con iOS 10 GM, non è più necessario aprire la finestra dei dispositivi.
kientux

2
Non sto parlando di eseguire da Xcode, tuttavia, sto parlando dei log stampati da un'app distribuita.
TahoeWolverine

Qualche progresso su questo?
jhurray

NSLog e printf vengono omessi dal registro del dispositivo iOS 10 nelle applicazioni distribuite. È possibile aggiungere una macro globale per sostituirla con una chiamata direttamente a os_log.
Elist

7

Inoltre, assicurati che la Console sia effettivamente visibile in Xcode (cioè, assicurati che l'icona a destra sia evidenziata in blu, come nell'immagine sotto). Dopo aver aggiornato Xcode, nasconde la console e mi mostra solo la vista Variabili. Questo faceva sembrare che NSLog()non funzionasse correttamente, mentre in effetti funzionava correttamente, non riuscivo a vedere l'output.

inserisci qui la descrizione dell'immagine


Inoltre può attivare la console con Shift + ⌘ + CXcode versione 8.3.3
DJ2

5

Hmmm ... sembra che la proprietà "OS_ACTIVITY_MODE": "disable" IMPEDISCE la visualizzazione di NSlog nel registro di Xcode 9.

La deselezione di questo valore nel mio schema ha ripristinato i miei log.


5

Per chiunque si imbatta in questo in futuro. Il motivo per cui NSLog non stampa su syslog in iOS 10 e iOS 11 è dovuto al passaggio di Apple a Unified Logging.

Puoi vedere il discorso del WWDC qui: https://developer.apple.com/videos/play/wwdc2016/721/

Documentazione qui: https://developer.apple.com/documentation/os/logging

Da 10 in poi dovresti usare os_log invece di NSLog.

Come trovare i log su disco: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

Per riassumere, i log si trovano in /var/db/diagnosticscui è possibile trovare una VM in/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

Copia tutti gli elementi all'interno diagnosticse uuidtextin una singola cartella (non includere le cartelle diagnostics o uuidtext solo quello che c'è dentro).

Rinomina quella cartella foldername.xarchive.

Aprilo in Console.app o usa l'utilità OSX log:log show <path to archive> --info --predicate <options>


E su iOS?
kakyo

1

Sto usando Xcode 8, quindi ho anche riscontrato lo stesso problema. E ho risolto questo problema aggiungendo value = disableil simulatore, ma su una macchina reale non aggiungo valore.


1
ho dei problemi con Xcode 9. ho inserito l'argomento: OS_ACTIVITY_MODE ma sembra non funzioni ...
Alessio Campanelli

4
Questa soluzione nasconderà tutti gli NSLog a partire da Xcode 9. Per mantenere NSLog, sostituire disablecon default.
Cœur

Secondo me questa è la risposta corretta. OS_ACTIVITY_MODEcon disableo defaultè diretto
Greg

1

NSLogi messaggi non vengono più visualizzati quando ho eseguito l'aggiornamento a Xcode 9.1 + iOS 11.1. Inizialmente la risposta accettata mi ha dato un modo per aggirare questo problema utilizzando l'app Console e abilitando il simulatore ( vedi la risposta di Lucas ).

Nell'app Console sotto Actionho provato a selezionare Include Debug Messagese deselezionare Include Info Messages(quindi la Console non è sommersa da messaggi di sistema). NSLogi messaggi apparivano nella finestra Console in Xcode ma non nell'app Console.

Mi sono reso conto che doveva esserci un modo più diretto per disableo abilitare (cioè default) NSLogsgrazie al commento di Coeur in risposta a questa risposta. A mio parere è la migliore risposta, perché l'impostazione OS_ACTIVITY_MODEper disableo defaultavrà più senso per i principianti.

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.