iOS 10 druckt keine NSLogs

88

NSLogAuf Xcode 8.0 Beta (8S128d) wird nichts gedruckt. printfist 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
Tyler Sheaffer
quelle
Ich hatte ein ähnliches Problem. Aber in iOS 8.1, Xcode 8. Ich habe jede einzelne Antwort hier überprüft. Es stellt sich heraus, dass ich alles richtig gemacht habe. Nichts hat wirklich geholfen. Also habe ich das Gerät ausgeschaltet und eingeschaltet. Es klappt. Ich habe diesen Kommentar hier geschrieben, damit er anderen helfen kann, die vor einem ähnlichen Problem stehen
KrishnaCA

Antworten:

229

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:

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

Nur hinzufügen OS_ACTIVITY_MODEund überprüfen (Fügen Sie keinen Wert hinzu)

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

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.

user6833743
quelle
4
> "Wert nicht hinzufügen" Ich habe es auf "Deaktivieren" gesetzt und es funktioniert! Leeres Feld funktioniert bei mir nicht.
m8labs
Sind Sie sicher, dass es beim Debuggen von echten iPhone-Geräten funktioniert, nicht beim Simulator? Wenn ich es auf "Deaktivieren" setze, kann die Konsole beim echten iPhone-Debugging kein NSLog ausführen.
user6833743
Ich habe jetzt ohne "Deaktivieren" überprüft, es funktioniert jetzt auf dem Gerät, aber auf dem Simulator kaputt, es zeigt jetzt alles wieder ...
m8labs
2
Gibt es überhaupt eine Möglichkeit, diesen Prozess zu automatisieren? Es ist wirklich sehr, sehr ärgerlich, dass wir uns daran erinnern müssen, so hin und her zu gehen: /
Gewächshaus
2
Diese Lösung verbirgt alle NSLog ab Xcode 9. Um NSLog beizubehalten, ersetzen Sie disabledurch default.
Cœur
27

Wenn Sie die Beta-Versionshinweise zu Xcode 8 lesen , werden Sie feststellen, dass dort steht:

Beim Debuggen einer App, die unter Simulator ausgeführt wird, sind Protokolle möglicherweise nicht in der Konsole sichtbar. Problemumgehung: Verwenden Sie den Befehl +/ in Simulator.app, um das Systemprotokoll in der Konsolen-App zu öffnen und NSLogs anzuzeigen. (26457535)

Lucas
quelle
9
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 Fenster Geräte öffnen (Umschalt + Befehl + 2) und dort Geräteprotokolle anzeigen. Das Debuggen von App-Protokollen ist jedoch schwierig, da auf der Konsole alle Protokolle von System und Apps angezeigt werden.
Kientux
19

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:

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

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.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

MiladiuM
quelle
Das funktioniert bei mir nicht. NSLogs werden für bereitgestellte Anwendungen nicht angezeigt. Ich verwende xcode 8.1 (läuft auf Mac 10.11) mit iOS 10-Geräten.
Mobjug
21
Diese Lösung verbirgt alle NSLog ab Xcode 9. Um NSLog beizubehalten, ersetzen Sie disabledurch default.
Cœur
3
Diese Antwort sollte aktualisiert werden, um @ Cœurs Korrektur für Xcode 9 zu berücksichtigen.
Joel
7

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)

kientux
quelle
Ich sehe die NSLogs für meine App nicht im Gerätefenster unter iOS 10 GM ... haben Sie das gleiche Problem?
TahoeWolverine
Ich kann Protokolle in Xcode 7 mit iOS 10 GM sehen, es ist nicht mehr erforderlich, das Gerätefenster zu öffnen.
Kientux
2
Ich spreche jedoch nicht von Xcode, sondern von den Protokollen, die von einer bereitgestellten App gedruckt werden.
TahoeWolverine
Irgendwelche Fortschritte in diesem Bereich?
Jhurray
NSLogs und printfs werden im iOS 10-Geräteprotokoll in bereitgestellten Anwendungen nicht berücksichtigt. Sie können ein globales Makro hinzufügen, um es durch einen Aufruf direkt an zu ersetzen os_log.
Elist
7

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.

Geben Sie hier die Bildbeschreibung ein

Stewart Macdonald
quelle
Kann auch Konsole mit Shift + ⌘ + CXcode Version 8.3.3
DJ2
5

Hmmm ... 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.

David Hersey
quelle
5

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/diagnosticsdenen sich eine VM unter befindet/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

Kopieren Sie alle Elemente in diagnosticsund uuidtextin 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>

Shane
quelle
Was ist mit iOS?
Kakyo
1

Ich verwende Xcode 8, daher bin ich auch auf das gleiche Problem gestoßen. Und ich habe dieses Problem gelöst, indem ich value = disableden Simulator hinzugefügt habe , aber auf einer realen Maschine habe ich keinen Mehrwert.

user6733740
quelle
1
Ich habe einige Probleme mit Xcode 9. Ich habe das Argument eingefügt: OS_ACTIVITY_MODE, aber es scheint nicht zu funktionieren ...
Alessio Campanelli
4
Diese Lösung verbirgt alle NSLog ab Xcode 9. Um NSLog beizubehalten, ersetzen Sie disabledurch default.
Cœur
Meiner Meinung nach ist dies die richtige Antwort. OS_ACTIVITY_MODEmit disableoder defaultist direkt
Greg
1

NSLogNachrichten 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 Actionich versucht, die Auswahl zu treffen Include Debug Messagesund die Auswahl aufzuheben Include Info Messages(damit die Konsole nicht mit Systemmeldungen überflutet wird). NSLogNachrichten 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 disableoder ermöglichen musste (dh default) . Meiner Meinung nach ist dies die beste Antwort, da die Einstellung auf oder für Anfänger sinnvoller ist.NSLogsOS_ACTIVITY_MODEdisabledefault

Greg
quelle