Nichts wird von NSLog
in Xcode 8.0 beta (8S128d) 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
Es kann sein, dass Sie die Eigenschaft "OS_ACTIVITY_MODE": "disable" in den Umgebungsvariablen des Scheme (zum Ausblenden der Betriebssystemausgabe vom Simulator) hinzugefügt und dies vergessen haben und jetzt auf einem echten Gerät ausgeführt werden.
In Xcode 8:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
Nur OS_ACTIVITY_MODE
hinzufügen und prüfen check Fügen Sie keinen Wert hinzu)
Zusammenfassung: Dies ist ein Fehler von Xcode 8 + iOS10, wir können ihn auf folgende Weise lösen:
Fügen Sie bei Verwendung des Simulators den Namen "OS_ACTIVITY_MODE" und den Wert "disable" hinzu und überprüfen Sie es.
Wenn Sie sich auf einem realen Gerät befinden, fügen Sie nur "OS_ACTIVITY_MODE" hinzu und prüfen Sie, ob es sich nicht um einen Wert handelt. Sie sehen das NSLog in der Xcode8-Konsole.
Wenn Sie die Beta-Versionshinweise zu Xcode 8 überprüfen, werden Sie feststellen, dass Folgendes angezeigt wird:
Beim Debuggen einer App, die auf 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 Konsole-App zu öffnen, um NSLogs anzuzeigen. (26457535)
das NSlog oder der Druck wird tatsächlich ausgeführt, ist aber in vielen anderen Konsolen-Debug-Ausgaben verborgen, um dieses Problem zu lösen Öffnen Sie Xcode8:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
fügen Sie "OS_ACTIVITY_MODE" hinzu und setzen Sie den Wert auf "disable" und überprüfen Sie ihn.
klicken Sie auf Schließen
xcode9
fügen Sie "OS_ACTIVITY_MODE" hinzu und setzen Sie den Wert auf "Standard", und überprüfen Sie ihn.
Stellen Sie außerdem sicher, dass die Konsole tatsächlich in Xcode sichtbar ist (d. H., Dass das Symbol auf der rechten Seite gemäß der Abbildung unten blau markiert ist). Nach dem Upgrade von Xcode wird die Konsole ausgeblendet und nur die Variablenansicht angezeigt. Dadurch sah es so aus, als würde NSLog()
nicht richtig funktionieren, obwohl es tatsächlich richtig funktionierte, ich konnte die Ausgabe einfach nicht sehen.
Hmmm ... es scheint, als würde die Eigenschaft "OS_ACTIVITY_MODE": "disable" verhindern, dass NSlog nicht im Xcode 9-Protokoll angezeigt wird.
Durch Deaktivieren dieses Werts in meinem Schema wurden meine Protokolle wiederhergestellt.
Ich kann auch keine NSLog-Ausgabe in echten iOS 10-Geräten sehen. Wenn Sie reale Geräte verwenden, können Sie das Fenster Geräte über Xcode (Umschalt + Befehlstaste + 2) öffnen und Geräteprotokolle dort anzeigen. Die Protokolle Ihrer App sind jedoch schwer einzusehen, da die Konsole Protokolle des Systems und aller Apps anzeigt.
(Ich verwende Xcode 7, daher ist es möglicherweise nicht das Problem von Xcode, sondern das von iOS 10.)
Für alle, die in der Zukunft darauf stoßen. Der Grund, warum NSLog in iOS 10 und iOS 11 nicht in Syslog druckt, ist der Umstieg von Apple auf Unified Logging.
Sie können die WWDC hier darüber reden 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
, das für eine VM unter /Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/
zu finden ist.
Kopieren Sie alle Elemente in diagnostics
und uuidtext
in einen einzigen Ordner (schließen Sie nicht die Ordner diagnostics oder uuidtext mit ein, die sich darin befinden).
Benennen Sie diesen Ordner in foldername.xarchive
um.
Öffnen Sie es in Console.app oder verwenden Sie die OSX-Funktion log
: log show <path to archive> --info --predicate <options>
Ich verwende Xcode 8, also bin ich auch auf das gleiche Problem gestoßen. Ich habe dieses Problem gelöst, indem ich value = disable
im Simulator hinzugefügt habe, aber auf einer echten Maschine füge ich keinen Wert hinzu.
NSLog
-Meldungen werden beim Upgrade auf Xcode 9.1 + iOS 11.1 nicht mehr angezeigt. Anfangs bot die akzeptierte Antwort eine Möglichkeit, dies mit der Console-App und dem Aktivieren des Simulators zu umgehen ( siehe Lucas 'Antwort ).
In der Konsolen-App unter Action
habe ich versucht, Include Debug Messages
auszuwählen und Include Info Messages
abzuwählen (damit die Konsole nicht mit Systemmeldungen überfüllt wird). NSLog
-Meldungen wurden im Konsolenfenster in Xcode, aber nicht in der Konsolen-App angezeigt.
Ich erkannte, dass es einen direkteren Weg geben musste, um disable
zu aktivieren oder zu aktivieren (d. H. default
) NSLogs
dank Coeur's Kommentar als Antwort auf diese Antwort. Meiner Meinung nach ist dies die beste Antwort, da die Einstellung von OS_ACTIVITY_MODE
auf disable
oder default
für Anfänger sinnvoller ist.