PlcrashRePorter ist eine zuverlässige Open-Source-Bibliothek, die einen In-Process-Framework für Live-Crash-Bericht für iOS, macOS und TVOS bietet. Die Bibliothek erkennt Abstürze und generiert Berichte, um Ihre Untersuchung und Fehlerbehebung bei den Informationen zu Anwendung, System, Prozess, Thread usw. sowie Stapelspuren zu unterstützen.
Der einfachste Weg, PlcrashRePorter zu verwenden, ist die Verwendung von AppCenter. Wenn Sie jedoch PlcrashRePorter direkt verwenden möchten, erhalten Sie die neueste Version auf der Releases -Seite.
Absturzberichte werden als protobufkodierte Nachrichten ausgegeben und können mit der CrashRePorter-Bibliothek oder einem Google-Protokollpuffer-Decoder dekodiert werden.
Zusätzlich zur In-Bibliothek-Dekodierungsunterstützung können Sie das mitgelieferte plcrashutil -Binäranlagen verwenden, um Absturzberichte in das Standard-iPhone-Textformat von Apple umzuwandeln:
plcrashutil convert -- format = iphone example_report . plcrash Sie können atos -Befehlszeilen-Tool verwenden, um die Ausgabe zu symbolisieren. Weitere Informationen zu diesem Tool finden Sie unter Hinzufügen von identifizierbaren Symbolnamen zu einem Crash -Bericht. Zukünftige Bibliotheksfreisetzungen können integrierte wiederverwendbare Formatters für die Ausgabe alternativer Formate direkt vom Telefon ausgeben.
PlcrashRePorter kann Ihrer App über Cocoapods, Karthago, Swift -Paketmanager oder durch manuelles Hinzufügen der Binärdateien zu Ihrem Projekt hinzugefügt werden.
Podfile die folgende Zeile hinzu: pod 'PLCrashReporter'pod install aus, um Ihren neu definierten Pod zu installieren, und öffnen Sie den .xcworkspace des Projekts.Cartfile die folgende Zeile hinzu: github "microsoft/plcrashreporter"carthage update --use-xcframeworks aus, um Abhängigkeiten abzuholen.Frameworks, Libraries and Embedded Content . Für iOS und TVOS wird Embed , um Do not embed . Setzen Sie für macOS Embed in Embed and Sign .HINWEIS: Die Karthago-Integration erstellt die Abhängigkeit in Xcode 12 nicht korrekt mit Flag. " Um es zum Laufen zu bringen, beziehen Sie sich auf diese Anweisung.
Hinweis: PlcrashRePorter XCFramework enthält statische Binärdateien für iOS und tvOS sowie dynamische Binärdateien für macOS. Stellen Sie beim Hinzufügen des Frameworks zu Ihrem Projekt sicher, dass in
Frameworks, Libraries and Embedded ContentEmbedausgewählt werden, umDo not embedfür iOS und tvOS undEmbed and Sign.PLCrashReporter-Static-{version}.zipist eine Ausnahme-sie enthält statische Frameworks für alle Plattformen.
Das folgende Beispiel zeigt einen Weg, wie man Crash Reporter initialisiert. Bitte beachten Sie, dass die Aktivierung von In-Process-Crash-Berichten mit allen beigefügten Debuggen in Konflikt steht. Stellen Sie daher sicher, dass der Debugger beim Absturz der App nicht angehängt wird .
@import CrashReporter;
...
// Uncomment and implement isDebuggerAttached to safely run this code with a debugger.
// See: https://github.com/microsoft/plcrashreporter/blob/2dd862ce049e6f43feb355308dfc710f3af54c4d/Source/Crash%20Demo/main.m#L96
// if (![self isDebuggerAttached]) {
// It is strongly recommended that local symbolication only be enabled for non-release builds.
// Use PLCrashReporterSymbolicationStrategyNone for release versions.
PLCrashReporterConfig *config = [[PLCrashReporterConfig alloc ] initWithSignalHandlerType: PLCrashReporterSignalHandlerTypeMach
symbolicationStrategy: PLCrashReporterSymbolicationStrategyAll];
PLCrashReporter *crashReporter = [[PLCrashReporter alloc ] initWithConfiguration: config];
// Enable the Crash Reporter.
NSError *error;
if (![crashReporter enableCrashReporterAndReturnError: &error]) {
NSLog ( @" Warning: Could not enable crash reporter: %@ " , error);
}
// }Überprüfung des gesammelten Crash -Berichts kann folgendermaßen erfolgen:
if ([crashReporter hasPendingCrashReport ]) {
NSError *error;
// Try loading the crash report.
NSData *data = [crashReporter loadPendingCrashReportDataAndReturnError: &error];
if (data == nil ) {
NSLog ( @" Failed to load crash report data: %@ " , error);
return ;
}
// Retrieving crash reporter data.
PLCrashReport *report = [[PLCrashReport alloc ] initWithData: data error: &error];
if (report == nil ) {
NSLog ( @" Failed to parse crash report: %@ " , error);
return ;
}
// We could send the report from here, but we'll just print out some debugging info instead.
NSString *text = [PLCrashReportTextFormatter stringValueForCrashReport: report withTextFormat: PLCrashReportTextFormatiOS];
NSLog ( @" %@ " , text);
// Purge the report.
[crashReporter purgePendingCrashReport ];
}import CrashReporter
...
// Uncomment and implement isDebuggerAttached to safely run this code with a debugger.
// See: https://github.com/microsoft/plcrashreporter/blob/2dd862ce049e6f43feb355308dfc710f3af54c4d/Source/Crash%20Demo/main.m#L96
// if (!isDebuggerAttached()) {
// It is strongly recommended that local symbolication only be enabled for non-release builds.
// Use [] for release versions.
let config = PLCrashReporterConfig ( signalHandlerType : . mach , symbolicationStrategy : . all )
guard let crashReporter = PLCrashReporter ( configuration : config ) else {
print ( " Could not create an instance of PLCrashReporter " )
return
}
// Enable the Crash Reporter.
do {
try crashReporter . enableAndReturnError ( )
} catch let error {
print ( " Warning: Could not enable crash reporter: ( error ) " )
}
// }Überprüfung des gesammelten Crash -Berichts kann folgendermaßen erfolgen:
// Try loading the crash report.
if crashReporter . hasPendingCrashReport ( ) {
do {
let data = try crashReporter . loadPendingCrashReportDataAndReturnError ( )
// Retrieving crash reporter data.
let report = try PLCrashReport ( data : data )
// We could send the report from here, but we'll just print out some debugging info instead.
if let text = PLCrashReportTextFormatter . stringValue ( for : report , with : PLCrashReportTextFormatiOS ) {
print ( text )
} else {
print ( " CrashReporter: can't convert report to text " )
}
} catch let error {
print ( " CrashReporter failed to load and parse with error: ( error ) " )
}
}
// Purge the report.
crashReporter . purgePendingCrashReport ( ) Außerdem werden die nächsten optionalen Tools verwendet, um zusätzliche Ressourcen zu erstellen:
protobuf-c zum Konvertieren von Protokollpuffer .proto -Dateien in den C-Deskriptorcode. Weitere Informationen finden Sie im offiziellen Protobuf-C-Repository oder verwenden Sie Homebrew, um es zu installieren.Öffnen Sie ein neues Fenster für Ihr Terminal.
Gehen Sie in den Root -Ordner von PlcrashRePorter und laufen Sie aus
xcodebuild -configuration Release -target ' CrashReporter 'Binärdateien für alle Plattformen erstellen.
So aktualisieren Sie die protobuf-c Abhängigkeit:
protobuf-ch und protobuf-cc Dateien vom Protobuf-C-Github-Repository herunter.Dependencies/protobuf-c durch die heruntergeladenen../Dependencies/protobuf-c/generate-pb-c.shWir freuen uns auf Ihre Beiträge über Pull -Anfragen.
Um zum PlcrashRePorter beizutragen, benötigen Sie die oben genannten Tools, um PlcrashRePorter für alle Architekturen und protobuf-c zu erstellen, um Protokollpuffer .proto Dateien in den C-Deskriptorcode umzuwandeln.
Dieses Projekt hat den Microsoft Open Source -Verhaltenscode übernommen. Weitere Informationen finden Sie im FAQ oder wenden Sie sich an [email protected] mit zusätzlichen Fragen oder Kommentaren.