PlcrashReporter-это надежная библиотека с открытым исходным кодом, которая предоставляет в процессоре Live Crash Smarkwork для использования на iOS, MacOS и TVOS. Библиотека обнаруживает сбои и генерирует отчеты, чтобы помочь вашему расследованию и устранению неполадок с помощью информации о приложении, системе, процессе, потоке и т. Д., А также с трассами стека.
Самый простой способ использования PlcrashReporter - это использование AppCenter. Однако, если вы хотите использовать Plcrashreporter напрямую, возьмите последний релиз на странице Releseses.
Отчеты о сбоях выводятся в виде сообщений, кодируемых Protobuf, и могут быть декодированы с помощью библиотеки Crashreporter или любого декодера буферов Google Protocol.
В дополнение к поддержке декодирования в лицензии вы можете использовать включенный двоичный файл plcrashutil для преобразования отчетов о сбоях в стандартный формат текста iPhone Apple:
plcrashutil convert -- format = iphone example_report . plcrash Вы можете использовать инструмент командной строки atos для символика вывода. Для получения дополнительной информации об этом инструменте см. Добавление имен символов в отчет о сбое. Будущие библиотечные выпуски могут включать встроенные форматер многообразования для вывода альтернативных форматов непосредственно с телефона.
PlcrashReporter может быть добавлен в ваше приложение через кокопод, Карфаген, Swift Package Manager или путем вручную добавить двоичные файлы в ваш проект.
Podfile : pod 'PLCrashReporter'pod install , чтобы установить недавно определенную POD и откройте проект .xcworkspace .Cartfile : github "microsoft/plcrashreporter"carthage update --use-xcframeworks для получения зависимостей.Frameworks, Libraries and Embedded Content . Для iOS и TVO, SET Embed , чтобы Do not embed . Для macOS SET Embed в Embed and Sign .ПРИМЕЧАНИЕ. Интеграция Карфагена не строит зависимость в XCode 12 с флагом "-NO-USE BINARY" или из конкретной ветви. Чтобы это работало, обратитесь к этой инструкции.
Примечание. Plcrashreporter Xcframework содержит статические двоичные файлы для iOS и TVO и динамические двоичные файлы для macOS. При добавлении фреймворка в ваш проект убедитесь, что в
Frameworks, Libraries and Embedded ContentEmbed, чтобыDo not embedдля iOS и TVO, а такжеEmbed and SignMacOS.PLCrashReporter-Static-{version}.zip-это исключение-он содержит статические рамки для всех платформ.
В следующем примере показан способ инициализации Crash Reporter. Обратите внимание, что включение в процесс отчетности о аварии будет противоречить любым прилагаемым отладчикам, поэтому убедитесь, что отладчик не прилагается при сбое приложения.
@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);
}
// }Проверка собранного отчета об аварии может быть сделана следующим образом:
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 ) " )
}
// }Проверка собранного отчета об аварии может быть сделана следующим образом:
// 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 ( ) Кроме того, следующие дополнительные инструменты используются для создания дополнительных ресурсов:
protobuf-c для преобразования протокола буфера .proto файлы в код дескриптора C. См. Официальный репозиторий Protobuf-C для получения дополнительной информации или используйте Homebrew для его установки.Откройте новое окно для вашего терминала.
Перейдите в корневую папку Plcrashreporter и запустите
xcodebuild -configuration Release -target ' CrashReporter 'создавать двоичные файлы для всех платформ.
Чтобы обновить зависимость protobuf-c :
protobuf-ch и protobuf-cc из репозитория GitHub Protobuf-C.Dependencies/protobuf-c на загруженные../Dependencies/protobuf-c/generate-pb-c.shМы с нетерпением ждем ваших взносов с помощью запросов на привлечение.
Чтобы внести свой вклад в PlcrashReporter, вам нужны инструменты, упомянутые выше, для создания PlcrashReporter для всех архитектур и protobuf-c для преобразования буфера протокола .proto файлы в код дескриптора C.
Этот проект принял код поведения с открытым исходным кодом Microsoft. Для получения дополнительной информации см. Кодекс поведения FAQ или свяжитесь с [email protected] с любыми дополнительными вопросами или комментариями.