wake-up-neo.net

iOS 10 druckt keine NSLogs

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
80
Tyler Sheaffer

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)

 enter image description here

 enter image description here

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.

221
user6833743

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)

26
Lucas

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.

 enter image description here  enter image description here

14
Milad Masoodi

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.

 enter image description here

6
smacdonald

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. 

5
David Hersey

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

5
kientux

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>

1
shane

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.

1
user6733740

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. 

0
Greg