webentwicklung-frage-antwort-db.com.de

Daten auf dem Gerät protokollieren und das Protokoll abrufen

Bei einem Debug-Build in Xcode, unabhängig davon, ob ich den Simulator oder ein aktuelles Gerät verwende, werden die Anweisungen NSLog, printf, fprintf assert und NSAssert auf der Konsole ausgegeben

Wenn ich jetzt einen Release-Build auf dem Gerät ausführe (sagen wir, ich sende einen Testflug-Build und eine große Version auf meinem iPhone; dies wird ein Release-Build sein), welche (wenn überhaupt) 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 nach 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 ich es abholen?

Könnte jemand die Situation klären? 

68
P i
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 der App-Delegatendatei hinzu, und im App-Dokumentverzeichnis auf dem iPhone wird eine Protokolldatei erstellt, in der alle Protokollereignisse der Konsole aufgezeichnet werden. Sie müssen diese Datei aus iTunes importieren, um alle Konsolenereignisse anzuzeigen.

Hinweis: Stellen Sie in der .plist-Datei sicher, dass Application supports iTunes file sharing vorhanden ist und auf YES gesetzt ist, damit Sie über iTunes darauf zugreifen können.

So rufen Sie Logfiles ab: Starten Sie iTunes. Nachdem Ihr Gerät eine Verbindung hergestellt hat, wählen Sie Apps - Wählen Sie Ihre App - in Augument Document erhalten Sie Ihre Datei. Sie können es dann auf Ihrer Festplatte speichern

83
shyla

In Xcode 6.1.1 können Sie die NSLog-Ausgabe folgendermaßen anzeigen. Ich bin mir jedoch nicht sicher, ob Sie Protokolle von zu weit zurück in der Zeit sehen können. Ich habe nur gesehen, dass es ein paar Stunden zurückgeht.

In jedem Fall sind hier die Schritte:

  1. Gehen Sie in Xcode zu Fenster -> Geräte.
  2. Wählen Sie im linken Bereich Ihr Gerät aus.
  3. Klicken Sie auf den kleinen Pfeil, wie in der Abbildung unten gezeigt.

enter image description here

134
Myxtic

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 entsprechen denen von Shyl

Fügen Sie einfach diesen Codeblock in application: didFinishLaunchingWithOptions in der App-Delegatendatei hinzu, und im App-Dokumentverzeichnis auf dem iPhone wird eine Protokolldatei erstellt, die alle Protokollereignisse der Konsole protokolliert. Sie müssen diese Datei aus iTunes importieren, um alle Konsolenereignisse anzuzeigen.

Hinweis: Stellen Sie in der .plist-Datei sicher, dass Application supports iTunes file sharing vorhanden ist und auf YES gesetzt ist, damit Sie auf .__ zugreifen können. über iTunes.

So erhalten Sie Logfiles: Starten Sie iTunes, nachdem Ihr Gerät angeschlossen ist Wählen Sie Apps - Wählen Sie Ihre App aus - im Augument-Dokument erhalten Sie Ihr Datei. Sie können es dann auf Ihrer Festplatte speichern

18
Kiran P Nair

NSLog wird in der Produktionsversion in das Geräteprotokoll 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.

11
Bora

Ich fand diesen Link von Apple sehr informativ und vollständig .. __ Sie haben so ziemlich alle Möglichkeiten, Protokolle des Geräts anzuzeigen oder darauf zuzugreifen, ob sie mit Ihrer Dev-Maschine verbunden sind oder nicht.

https://developer.Apple.com/library/ios/qa/qa1747/_index.html

7
GrandSteph

Ja, NSLog-Ausgänge auf dem Gerät. Sie können die Ausgaben sehen, wenn Ihr Gerät an Ihren Mac angeschlossen ist und das Xcode Organizer-Tool verwendet.

2
Denis

Wenn Sie Testflight SDK verwenden, können Sie alle Protokolle mit ihrer Remote Logging-Funktion erfassen.

2
pojo

Ich denke, in Xcode 9.3 wurde der Geräteprotokollbildschirm an einen neuen Ort verschoben. Verweisen Sie einfach auf den folgenden Link. 

Rufe Geräteprotokolle zur Laufzeit in Xcode ab

0
Vaibhav

Ich weiß, dass dies ein alter Thread ist, aber Sie können auch auf die Geräteprotokolle zugreifen, die zu:

Einstellungen -> Datenschutz -> Analytics -> Daten

Ich hoffe das hilft

Grüße

0
ramonesteban78