我知道在 Android 中,有一个非常可靠的内置系统可以通知我发生的崩溃。他们几乎立即将堆栈跟踪和其他一些信息写入 Google 文档。它工作得非常好。
我开始为 ios 研究同样的东西,但我没有发现任何类似的东西同样有效。我读过这篇文章:Xcode 故事板:为什么 iPad 故事板显示 iPhone 大小的视图?
但我不确定是否仍然如此。谁能推荐我在用户设备上发生的崩溃报告中使用什么?
谢谢!
我知道在 Android 中,有一个非常可靠的内置系统可以通知我发生的崩溃。他们几乎立即将堆栈跟踪和其他一些信息写入 Google 文档。它工作得非常好。
我开始为 ios 研究同样的东西,但我没有发现任何类似的东西同样有效。我读过这篇文章:Xcode 故事板:为什么 iPad 故事板显示 iPhone 大小的视图?
但我不确定是否仍然如此。谁能推荐我在用户设备上发生的崩溃报告中使用什么?
谢谢!
您可以做的是创建一个新的未捕获异常处理程序,然后通过NSSetUncaughtExceptionHandler注册它。这样,每次崩溃都可以在杀死之前被拦截,您可以将其记录/保存到某个地方以上传。
(我个人使用了这个链接中描述的方法:http: //cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html)
我将Flurry与 uncaughtExceptionHandler 和GTMStackTrace 一起使用
异常处理程序可能如下所示:
void uncaughtExceptionHandler(NSException *exception)
{
@try
{
NSString *fullBacktrace = GTMSBStackTraceFromException(exception);
NSMutableString *backtrace = [NSMutableString stringWithUTF8String:""];
NSArray *backtraceArray = [fullBacktrace componentsSeparatedByString:@"\n"];
for (id entry in backtraceArray)
{
NSRange testRange = [entry rangeOfString:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
if (testRange.length)
{
[backtrace appendString:entry];
}
}
NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet];
NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];
NSArray *parts = [backtrace componentsSeparatedByCharactersInSet:whitespaces];
NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];
NSString *strippedBacktrace = [filteredArray componentsJoinedByString:@" "];
[FlurryAnalytics logError:@"uncaughtExceptionHandler"
message:[NSString stringWithFormat:@"%@", strippedBacktrace ? strippedBacktrace : @"no matching backtrace"]
exception:exception];
}
@catch (NSException *exception)
{
NSLog(@"whoa! could not handle uncaught exception!");
[FlurryAnalytics logError:@"uncaughtExceptionHandler"
message:@"no matching backtrace"
exception:exception];
}
}
Testflight也有一个很好的崩溃日志。
设置未捕获异常处理程序只会为您提供崩溃报告的子集,而且您通过这种方式获得的报告的详细信息非常有限。你没有得到所有线程的堆栈跟踪,你没有得到真正发生崩溃的异常的堆栈跟踪,你没有得到发生崩溃的代码的行号。此外,您不会收到任何由信号处理程序引起的崩溃报告。
此外,一旦发生崩溃,您不应该运行任何 Objective-C 代码,因为它不是异步安全的。有关它的更多信息,请参阅本文:可靠的崩溃报告
如果发布了有关您可以做什么作为以下问题的答案的更多详细信息: iOS和iOS 崩溃日志捕获、调试信息的崩溃分析和报告。捕获并通过电子邮件发送给开发团队