Bei einem Debug-Build in Xcode werden unabhängig davon, ob ich den Simulator oder ein tatsächliches Gerät verwende, die Anweisungen NSLog, printf, fprintf assert und NSAssert auf der Konsole ausgegeben
Wenn ich jetzt einen Release-Build auf dem Gerät ausführe (z. B. sende ich einen Testflug-Build und vergrößere ihn auf meinem iPhone; dies wird ein Release-Build sein), welche davon (falls vorhanden) werden aufgezeichnet?
Und wie rufe ich das Protokoll ab?
Gibt NSLog beim Release-Build tatsächlich etwas aus? Was ist der bestimmende Faktor? Ob es an stdout oder stderr schreibt? wird nur stderr in das Geräteprotokoll geschrieben? Bedeutet das, dass ich fprintf verwenden muss? Wird ALLES in das Geräteprotokoll geschrieben? gibt es überhaupt so etwas? Wenn ja, wie kann man es abholen?
Könnte jemand die Situation klären?
Antworten:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]]; NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName]; freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
Fügen Sie einfach diesen Codeblock in der
application:didFinishLaunchingWithOptions
Methode in die App-Delegatendatei ein und es wird eine Protokolldatei im App-Dokumentverzeichnis auf dem iPhone erstellt, die alle Konsolenprotokollereignisse protokolliert. Sie müssen diese Datei aus iTunes importieren, um alle Konsolenereignisse anzuzeigen.Hinweis: Stellen Sie in der .plist-Datei sicher, dass diese
Application supports iTunes file sharing
vorhanden und auf eingestellt ist,YES
damit Sie über iTunes darauf zugreifen können.So erhalten Sie Protokolldateien: Starten Sie iTunes. Nachdem Ihr Gerät eine Verbindung hergestellt hat, wählen Sie Apps - wählen Sie Ihre App aus. Im Augument-Dokument erhalten Sie Ihre Datei. Sie können es dann auf Ihrer Festplatte speichern
quelle
.log
Datei im Dokumentenverzeichnis haben, schreibt iOS Ihre Konsolenausgabe dort?NSDocumentDirectory
es für Protokolldateien geeignet ist. Es ist normalerweise für vom Benutzer selbst generierte Inhalte gedacht. Protokolldateien sind jedoch Inhalte, die von der App unterstützt werden. Daher gehören sie möglicherweise zumNSLibraryDirectory
Unterverzeichnis / Logs.In Xcode 6.1.1 können Sie die NSLog-Ausgabe wie folgt anzeigen. Ich bin mir jedoch nicht sicher, ob Sie damit Protokolle von zu weit zurück in der Zeit sehen können. Ich habe nur gesehen, dass es wieder ein paar Stunden dauert.
In jedem Fall sind hier die Schritte:
quelle
In Swift 3.0 ändert sich der Code von Shyl in:
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) let documentsDirectory = paths[0] let fileName = "\(Date()).log" let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName) freopen(logFilePath.cString(using: String.Encoding.ascii)!, "a+", stderr)
Alle anderen Prozesse sind die gleichen, die von Shyl erklärt wurden
quelle
/var/db/diagnostics/
. Siehe hier .NSLog wurde in die Produktionsversion des Geräts geschrieben. Sie können dies überprüfen, indem Sie Ihr iPhone an Ihr System anschließen und Organizer verwenden. Wählen Sie Ihr iPhone im Organizer aus und klicken Sie auf Geräteprotokolle. Sie würden alle NSLog-Ausgaben im Protokoll sehen.
quelle
Ich fand diesen Link von APPLE sehr informativ und vollständig. Es bietet Ihnen so ziemlich alle Optionen, um Protokolle des Geräts anzuzeigen oder darauf zuzugreifen, unabhängig davon, ob sie mit Ihrem Entwicklungscomputer verbunden sind oder nicht.
https://developer.apple.com/library/ios/qa/qa1747/_index.html
quelle
Ja, NSLog wird auf dem Gerät ausgegeben. Sie können die Ausgaben sehen, wenn Ihr Gerät an Ihren Mac angeschlossen ist und das Xcode Organizer-Tool verwendet.
quelle
Wenn Sie das Testflight SDK verwenden, können Sie alle Protokolle mit der Remote-Protokollierungsfunktion erfassen .
quelle
Ich weiß, dass dies ein alter Thread ist, aber Sie können auch auf die Geräteprotokolle zugreifen:
Einstellungen -> Datenschutz -> Analytics -> Daten
Ich hoffe das hilft
Grüße
quelle
Ich denke, in Xcode 9.3 wurde der Geräteprotokollbildschirm an einen neuen Speicherort verschoben. Verweisen Sie bitte auf den folgenden Link.
Abrufen von Geräteprotokollen zur Laufzeit in Xcode
quelle