Wie kann ich die Konsolenprotokolle vom iOS-Simulator abrufen?

241

Ich möchte sehen, was im iOS-Simulator passiert, wenn ich die App nicht in Xcode teste.

Wenn ich beispielsweise einen Link im Safari-Simulator öffne, sehen Sie, was in der Konsole passiert, oder wenn ich eine Web-App installiere, sehen Sie sich die Links an, die ich in der Konsole drücke.

Wie kann ich das machen?

Ich möchte es in Xcode oder Terminal sehen, aber es ist kein Problem, wenn ich ein anderes Stück Software verwenden muss.

user1335015
quelle
Siehe auch: stackoverflow.com/a/29310542/59087
Dave Jarvis

Antworten:

270

iOS Simulator> Menüleiste> Debuggen> Systemprotokoll öffnen


Alte Wege:

iOS Simulator druckt seine Protokolle direkt in stdout, sodass Sie sehen können, dass die Protokolle mit den Systemprotokollen verwechselt werden.

Öffnen Sie das Terminal und geben Sie Folgendes ein: tail -f /var/log/system.log

Führen Sie dann den Simulator aus.

BEARBEITEN:

Bei Mavericks / Xcode 5 funktioniert dies nicht mehr. Jetzt können Sie in einem eigenen Ordner auf die Simulatorprotokolle zugreifen: ~/Library/Logs/iOS Simulator/<sim-version>/system.log

Sie können entweder die Console.app verwenden, um dies zu sehen, oder einfach einen Tail erstellen (z. B. iOS 7.0.3 64 Bit):

tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log

EDIT 2:

Sie befinden sich jetzt in ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

Fbernardo
quelle
7
Ist das noch richtig? Ich sehe nichts von console.login diesem Protokoll mit tailoderConsole.app
Jeff
3
Ich erhalte auch unter OSX 10.10 keine Ergebnisse.
Diese
65
iOS Simulator> Menüleiste> Debuggen> Systemprotokoll
öffnen
4
Vielen Dank! Es ist heutzutage jedoch ~ / Library / Logs / CoreSimulator / <simulator-hash> /system.log.
Calimarkus
6
Die Antwort von BYossarian ist die "richtige". "Entwickeln Sie ein Menü in einer Desktop-Safari, mit dem Sie die iOS-Simulatorkonsole sehen können: Entwickeln -> iPhone Simulator -> Site-Name"
snobojohan
222

Sie können die Konsole für den iOS-Simulator über Desktop Safari anzeigen. Es ähnelt der Art und Weise, wie Sie Desktop-Safari verwenden, um die Konsole für physische iOS-Geräte anzuzeigen.

Immer wenn der Simulator ausgeführt wird und eine Webseite geöffnet ist, gibt es in der Desktopsafari im Menü "Entwickeln" eine Option, mit der Sie die iOS-Simulatorkonsole anzeigen können:

Entwickeln -> iPhone Simulator -> Site-Name

Ben Jackson
quelle
31
Dies ist die beste Antwort, ebenso wie die "echte" Konsole des Browsers, und Sie können Javascript-Befehle im laufenden Betrieb ausführen. Danke dir.
Jorge Fuentes González
4
Warum habe ich das nirgendwo anders dokumentiert gesehen? Brillant.
Rübe
4
Der Web Inspector (wenn auf diese Weise zugegriffen wird) wird für mich völlig leer angezeigt (Mavericks Macbook Pro - alle Updates installiert - Safari 7.0.5)
jamis0n
5
Safari scheint zu erkennen, dass der Simultor geöffnet ist, aber es heißt "No Inspectable Applications"
Nickmorss
4
wovon redest du ... dies öffnet nur den Web-Debugger für eine Website, die in einer beliebigen Webansicht des Simulators geöffnet ist. Die dort angezeigten Konsolenmeldungen werden im Javascript-Kontext protokolliert. Dies sind NICHT die Protokolle des iOS-Simulators. Vermisse ich etwas Vielleicht hat Apple seit 2013 etwas geändert, aber ab heute hat diese Antwort eine lächerlich hohe Punktzahl für den Titel der Frage
Radu Simionescu
107

Im Simulator gibt es eine Option zum Öffnen des console

Debug > Open System Log

oder verwenden Sie die

keyboard shortcut: ⌘/

Screenshot des Simulator-Menüs

Mark Bridges
quelle
90

iOS 8 und iOS 9

Unter iOS 8 und iOS 9 ist dieser Speicherort jetzt:

~/Library/Logs/CoreSimulator/<DEVICE_CODE>

Folgendes wird also funktionieren:

tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log

Der DEVICE_CODEWert kann über den folgenden Konsolenbefehl ermittelt werden:

instruments -s devices
Viteinfinit
quelle
1
So finden Sie die Gerätekennung: Klicken Sie in Xcode auf Windows> Geräte. Ein Gerät und die Kennung werden im rechten Bereich angezeigt.
Neilco
3
Sie können instruments -s devicesin der Konsole
viteinfinite
2
s / console / terminal window /
mharper
28

Sie sollten sich nicht darauf verlassen instruments -s. Das offiziell unterstützte Tool für die Arbeit mit Simulatoren über die Befehlszeile ist xcrun simctl.

Das Protokollverzeichnis für ein Gerät finden Sie mit xcrun simctl getenv booted SIMULATOR_LOG_ROOT. Dies ist immer korrekt, auch wenn sich der Standort ändert.

Jetzt, da sich die Dinge ändern, ist os_loges einfacher, Console.app auf dem Host-Mac zu öffnen. Gestartete Simulatoren sollten wie physische Geräte links als Protokollquelle angezeigt werden. Sie können auch Protokollbefehle im gebooteten Simulator ausführen:

# os_log equivalent of tail -f
xcrun simctl spawn booted log stream --level=debug

# filter log output
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "myapp"'
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info'

# a log dump that Console.app can open
xcrun simctl spawn booted log collect

# open location where log collect will write the dump
cd `xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY`

Wenn Sie Safari Developer-Tools (einschließlich der JS-Konsole) mit einer Webseite im Simulator verwenden möchten : Starten Sie einen der Simulatoren, öffnen Sie Safari, gehen Sie auf Ihrem Mac zu Safari, und im Menü sollte Simulator angezeigt werden.

Sie können eine URL im Simulator öffnen, indem Sie sie aus der Safari-Adressleiste ziehen und im Simulatorfenster ablegen. Sie können auch verwenden xcrun simctl openurl booted <url>.

russbishop
quelle
Dies ist ab Xcode 9.3, iOS 11 die richtige Antwort. Die in anderen Antworten genannten Speicherorte sind nicht mehr korrekt.
Michael McGuire
Dies funktionierte für mich unter Xcode Version 10.1 (10B61), iOS 12.1 Simulator. Verwenden Sie diese Option, um die Ausgabe der iOS-App-Konsole in Emacs anzuzeigen. Andere Antworten haben in der Vergangenheit funktioniert, aber nicht mehr.
tboyce12
Für mich funktionierte die Reihenfolge (ich hatte Safari vor dem Simulator geöffnet und so erschien der Menüeintrag nicht in Safari)!
Shmarkus
Wo haben Sie die Dokumentation für das Flag "Prädikat" gefunden?
Hjulle
18

Wenn Sie Swift verwenden , denken Sie daran, dass printlnnur im Debug-Protokoll (das im Debug-Bereich von xCode angezeigt wird) gedruckt wird. Wenn Sie in system.log drucken möchten, müssen Sie wie früher verwenden NSLog.

Anschließend können Sie das Simulatorprotokoll über das Menü Debug> Systemprotokoll öffnen ... (cmd + /) anzeigen.

cprcrack
quelle
12

Tailing /var/log/system.loghat bei mir nicht funktioniert. Ich habe meine Protokolle mithilfe von gefunden Console.app. Sie waren in

~/Library/Logs/iOS Simulator/{version}/system.log

dschibuti33
quelle
Dies ist eine großartige Methode, um auf Protokolle von beispielsweise vor Tagen zurückzublicken.
Troy
10

Sie können die ConsoleAnwendung (wählen Sie Ihr Gerät unter Geräte aus) auf Ihrem Mac verwenden, um eine Protokollnachricht anzuzeigen, die mit gesendet wurde NSLog(Sie sehen keine Protokolle von der printFunktion).

Geben Sie hier die Bildbeschreibung ein

Bitte beachten Sie, dass WebViewSie verwenden sollten , wenn Sie ein Protokoll von sehen möchtenSafary -> Develop -> device

[Absturzprotokoll suchen]

yoAlex5
quelle
Drücken Sie cmd then space bar Typ " Console" enter. Übrigens. das sollte heute die richtige Antwort sein.
Einsamer
7

XCode> 6.0 UND iOS> 8.0 Das folgende Skript funktioniert, wenn Sie über eine XCode-Version> 8.0 verfügen

Ich verwende das folgende kleine Skript, um die Simulatorprotokolle auf der Systemkonsole zu speichern.

#!/bin/sh
sim_dir=`xcrun instruments -s | grep "iPhone 6 (8.2 Simulator)" | awk {'print $NF'} | tr -d '[]'`
tail -f ~/Library/Logs/CoreSimulator/$sim_dir/system.log

Sie können den im Grep verwendeten Simulatortyp als Argument übergeben. Wie in den obigen Beiträgen erwähnt, gibt es simctl- und instrumente-Befehle, um den Typ der Simulatoren anzuzeigen, die je nach Xcode-Version zur Verwendung verfügbar sind. Anzeigen der Liste der verfügbaren Geräte / Simulatoren.

xcrun instruments -s

ODER

xcrun simctl list

Jetzt können Sie den Gerätecode ODER den Simulatortyp als Argument an das Skript übergeben und das "iPhone 6 (8.2 Simulator)" in grep durch $ 1 ersetzen

Gurubaran
quelle
0

Ich kann das Protokoll direkt über den iOS-Simulator öffnen: Ich bin Debug -> Open System Log...mir nicht sicher, wann dies eingeführt wurde, daher ist es möglicherweise für frühere Versionen nicht verfügbar.

bompf
quelle
0

Sie können das Simulator-Konsolenfenster einschließlich Safari Web Inspector und aller Webentwicklungstools mithilfe der Safari Technology Preview-App anzeigen. Öffnen Sie Ihre Seite in Safari im Simulator und gehen Sie dann zu Safari Technology Preview> Develop> Simulator.

Webentwicklungstools

Mau
quelle
0

Es werden keine NSLogoder printInhalte geschrieben system.log, die durch Auswahl Simulator -> Debug -> Open System logauf Xcode 11 geöffnet werden können .

Ich finde einen Weg, schreibe Protokolle in eine Datei und öffne die xx.logmit. Terminal.appDann werden die Protokolle in angezeigtTerminal.app lebhaft präsentiert.

Ich benutze CocoaLumberjack, um dies zu erreichen.

SCHRITT 1:

DDFileLogger DDOSLoggerProtokollpfad hinzufügen und drucken. config()sollte beim App-Mittagessen aufgerufen werden.

static func config() {
    #if DEBUG
    DDLog.add(DDOSLogger.sharedInstance) // Uses os_log
    let fileLogger: DDFileLogger = DDFileLogger() // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7
    DDLog.add(fileLogger)
    DDLogInfo("DEBUG LOG PATH: " + (fileLogger.currentLogFileInfo?.filePath ?? ""))
    #endif
}

SCHRITT 2:

Ersetzen printoder NSLogdurch DDLogXXX.

SCHRITT 3:

$ tail -f {path of log}

Hier wird die Nachricht in Terminal.app lebendig angezeigt.

Eins noch. Wenn sich keine Nachricht abmeldet , stellen Sie sicher, dass Environment Variables-> OS_ACTIVITY_MODENICHT deaktiviert ist.

Jules
quelle