NSLog
Auf Xcode 8.0 Beta (8S128d) wird nichts gedruckt. printf
ist unverändert
Hier ist mein Code:
NSLog(@"hello from NSLog");
printf("hello from printf");
Hier ist die Ausgabe auf iOS 9 Simulator:
2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf
Hier ist die Ausgabe auf iOS 10 Simulator:
hello from printf
Antworten:
Es kann sein, dass Sie die Eigenschaft "OS_ACTIVITY_MODE": "disable" in den Umgebungsvariablen des Schemas hinzugefügt haben (um die OS-Ausgabe aus dem Simulator auszublenden) und diese vergessen haben und jetzt auf einem realen Gerät ausgeführt werden.
In Xcode 8:
Nur hinzufügen
OS_ACTIVITY_MODE
und überprüfen (Fügen Sie keinen Wert hinzu)Zusammenfassung: Dies ist ein Fehler von Xcode 8 + iOS10. Wir können ihn folgendermaßen beheben:
Fügen Sie bei Verwendung des Simulators den Namen "OS_ACTIVITY_MODE" und den Wert "disable" hinzu und überprüfen Sie ihn.
Fügen Sie auf einem realen Gerät nur "OS_ACTIVITY_MODE" hinzu und überprüfen Sie es (fügen Sie den Wert nicht hinzu). Sie sehen das NSLog in der Xcode8-Konsole.
quelle
disable
durchdefault
.Wenn Sie die Beta-Versionshinweise zu Xcode 8 lesen , werden Sie feststellen, dass dort steht:
quelle
Das NSlog oder der Druck wird tatsächlich ausgeführt, ist jedoch unter vielen anderen Konsolen-Debug-Ausgaben versteckt, um dieses Problem zu lösen. Öffnen Sie Xcode8:
Fügen Sie "OS_ACTIVITY_MODE" hinzu, setzen Sie den Wert auf "disable" und überprüfen Sie ihn.
Klicken Sie auf Schließen
xcode9
Fügen Sie "OS_ACTIVITY_MODE" hinzu, setzen Sie den Wert auf "default" und überprüfen Sie ihn.
quelle
disable
durchdefault
.Ich kann die NSLog-Ausgabe auch auf einem echten iOS 10-Gerät nicht sehen. Wenn Sie echte Geräte verwenden, können Sie das Gerätefenster über Xcode (Umschalt + Befehl + 2) öffnen und dort Geräteprotokolle anzeigen. Es ist jedoch schwierig, die Protokolle Ihrer App anzuzeigen, da auf der Konsole Protokolle vom System und allen Apps angezeigt werden.
(Ich verwende Xcode 7, daher ist es möglicherweise nicht das Problem von Xcode, sondern das Problem von iOS 10)
quelle
os_log
.Stellen Sie außerdem sicher, dass die Konsole in Xcode tatsächlich sichtbar ist (dh stellen Sie sicher, dass das Symbol auf der rechten Seite gemäß dem folgenden Bild blau hervorgehoben ist). Nachdem ich Xcode aktualisiert habe, wird die Konsole ausgeblendet und nur die Variablenansicht angezeigt. Dadurch sah es so aus, als würde
NSLog()
es nicht richtig funktionieren, obwohl es tatsächlich richtig funktionierte. Ich konnte die Ausgabe einfach nicht sehen.quelle
Shift + ⌘ + C
Xcode Version 8.3.3Hmmm ... es scheint, als ob die Eigenschaft "OS_ACTIVITY_MODE": "Deaktivieren" verhindert, dass NSlog im Xcode 9-Protokoll angezeigt wird.
Durch Deaktivieren dieses Werts in meinem Schema wurden meine Protokolle wiederhergestellt.
quelle
Für alle, die in Zukunft darauf stoßen. Der Grund, warum NSLog in iOS 10 und iOS 11 nicht in Syslog druckt, liegt darin, dass Apple zu Unified Logging wechselt.
Sie können das WWDC-Gespräch hier sehen: https://developer.apple.com/videos/play/wwdc2016/721/
Dokumentation hier: https://developer.apple.com/documentation/os/logging
Ab 10 sollten Sie os_log anstelle von NSLog verwenden.
So finden Sie die Protokolle auf der Festplatte: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/
Zusammenfassend befinden sich die Protokolle, in
/var/db/diagnostics
denen sich eine VM unter befindet/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/
Kopieren Sie alle Elemente in
diagnostics
unduuidtext
in einen einzelnen Ordner (enthalten Sie nicht die Ordnerdiagnose oder den UUID-Text, sondern nur das, was sich darin befindet).Benennen Sie diesen Ordner um
foldername.xarchive
.Öffnen Sie es in Console.app oder verwenden Sie das OSX-Dienstprogramm
log
:log show <path to archive> --info --predicate <options>
quelle
Ich verwende Xcode 8, daher bin ich auch auf das gleiche Problem gestoßen. Und ich habe dieses Problem gelöst, indem ich
value = disable
den Simulator hinzugefügt habe , aber auf einer realen Maschine habe ich keinen Mehrwert.quelle
disable
durchdefault
.OS_ACTIVITY_MODE
mitdisable
oderdefault
ist direktNSLog
Nachrichten wurden beim Upgrade auf Xcode 9.1 + iOS 11.1 nicht mehr angezeigt. Die akzeptierte Antwort gab mir zunächst die Möglichkeit, dies mithilfe der Konsolen-App zu umgehen und den Simulator zu aktivieren ( siehe Lucas 'Antwort ).In der Konsolen-App unter habe
Action
ich versucht, die Auswahl zu treffenInclude Debug Messages
und die Auswahl aufzuhebenInclude Info Messages
(damit die Konsole nicht mit Systemmeldungen überflutet wird).NSLog
Nachrichten wurden im Konsolenfenster in Xcode angezeigt, jedoch nicht in der Konsolen-App.Ich erkannte, dass es dank Coeurs Kommentar als Antwort auf diese Antwort einen direkteren Weg geben
disable
oder ermöglichen musste (dhdefault
) . Meiner Meinung nach ist dies die beste Antwort, da die Einstellung auf oder für Anfänger sinnvoller ist.NSLogs
OS_ACTIVITY_MODE
disable
default
quelle