O PlCrashReporter é uma biblioteca de código aberto confiável que fornece uma estrutura de relatório de falhas ao vivo em processo para uso no iOS, macOS e TVOS. A biblioteca detecta falhas e gera relatórios para ajudar sua investigação e solução de problemas com as informações de aplicação, sistema, processo, thread etc., bem como traços de pilha.
A maneira mais fácil de usar o PlcrashReporter é usando o AppCenter. No entanto, se você deseja usar diretamente o PlcrashReporter, obtenha a página mais recente na página de lançamentos.
Os relatórios de falhas são produzidos como mensagens codificados pelo Protobuf e podem ser decodificados usando a biblioteca CrashReporter ou qualquer decodificador de buffers do Protocolo do Google.
Além do suporte de decodificação na biblioteca, você pode usar o binário plcrashutil incluído para converter relatórios de falhas no formato de texto padrão do iPhone da Apple:
plcrashutil convert -- format = iphone example_report . plcrash Você pode usar a ferramenta atos de linha de comando para simbolizar a saída. Para obter mais informações sobre esta ferramenta, consulte Adicionando nomes de símbolos identificáveis a um relatório de falha. Os lançamentos futuros da biblioteca podem incluir formatados reutilizáveis internos, para a saída de formatos alternativos diretamente do telefone.
O PlcrashReporter pode ser adicionado ao seu aplicativo via Cocoapods, Cartago, Swift Package Manager ou adicionando manualmente os binários ao seu projeto.
Podfile : pod 'PLCrashReporter'pod install para instalar seu pod recém -definido e abra o .xcworkspace do projeto.Cartfile : github "microsoft/plcrashreporter"carthage update --use-xcframeworks para buscar dependências.Frameworks, Libraries and Embedded Content . Para iOS e TVOS, Embed para Do not embed . Para MacOS, defina Embed para Embed and Sign .NOTA: A integração do Cartago não cria a dependência corretamente no Xcode 12 com o sinalizador "--não-use-binários" ou de uma ramificação específica. Para fazer funcionar, consulte esta instrução.
NOTA: O PlcrashReporter XCFramework contém binários estáticos para iOS e TVOS e binários dinâmicos para macOS. Ao adicionar a estrutura ao seu projeto, verifique se em
Frameworks, Libraries and Embedded ContentEmbedsão selecionadas paraDo not embedpara iOS e TVOS eEmbed and Signpara MacOS.PLCrashReporter-Static-{version}.zipé uma exceção-ele contém estruturas estáticas para todas as plataformas.
O exemplo a seguir mostra uma maneira de inicializar o repórter do Crash. Observe que a ativação do relatório em processo em processo entrará em conflito com qualquer depuração anexado, portanto, verifique se o depurador não está anexado ao travar o aplicativo.
@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);
}
// }A verificação do relatório de falha coletado pode ser feito da seguinte maneira:
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 ) " )
}
// }A verificação do relatório de falha coletado pode ser feito da seguinte maneira:
// 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 ( ) Além disso, as próximas ferramentas opcionais são usadas para criar recursos adicionais:
protobuf-c para converter o buffer de protocolo .proto Proto do código do descritor C. Consulte o repositório oficial do Protobuf-C para obter mais informações ou use o Homebrew para instalá-lo.Abra uma nova janela para o seu terminal.
Vá para a pasta raiz do PlcrashReporter e corra
xcodebuild -configuration Release -target ' CrashReporter 'Para criar binários para todas as plataformas.
Para atualizar a dependência protobuf-c :
protobuf-ch e protobuf-cc mais recentes do repositório Protobuf-C Github.Dependencies/protobuf-c pelos baixados../Dependencies/protobuf-c/generate-pb-c.shEstamos ansiosos por suas contribuições por meio de solicitações de tração.
Para contribuir com o PlcrashReporter, você precisa das ferramentas mencionadas acima para construir o PlcrashReporter para todas as arquiteturas e protobuf-c para converter arquivos .proto de protocolo em código do descritor.
Este projeto adotou o Código de Conduta Open Microsoft. Para obter mais informações, consulte o Código de Conduta Perguntas frequentes ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.