ios - 是否有iPhone/iPad生态系统的可靠崩溃报告系统?
我知道在Android中,有一个相当可靠的内置系统来通知我发生崩溃。他们几乎立即将堆栈跟踪和一些其他信息写入Google文档。它的工作非常好。ios - 是否有iPhone/iPad生态系统的可靠崩溃报告系统?
我开始研究ios的同样的事情,我没有发现任何类似的东西同样有效。我读过这篇文章:Xcode storyboard: Why does the iPad storyboard show iPhone sized views?
但我不确定这是否仍然如此。任何人都可以推荐我在用户设备上使用哪些崩溃报告?
谢谢!
我使用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也有一个很好的崩溃日志。
你可以做的是创建一个新的未捕获异常处理程序,然后通过NSSetUncaughtExceptionHandler进行注册。这样,每次崩溃都可以在杀死之前被拦截,并且可以将其记录下来并保存在某处上传。
(我个人用在这个环节中描述的方法:http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html)
谢谢 - 正当我阅读cocoawithlove链接时,它表示这仅用于测试。苹果是否不允许在生产应用程序中使用?或者你是否能够在生产应用程序中保留该代码? – GeekedOut 2012-08-16 15:18:26
当我们在AppStore上发布应用程序时,苹果公司没有透露有关它的任何信息,所以我想他们允许。 – 2012-08-21 13:59:00
设置uncaughtexception处理程序只会给你一个崩溃报告的子集,而且你获得的报告的细节非常有限。你不会得到所有线程的堆栈跟踪信息,你没有得到发生崩溃的异常的堆栈跟踪,并且你没有得到发生崩溃的代码的行号。此外,您不会收到由信号处理程序引起的任何崩溃报告。
另外,一旦发生崩溃,您不应该运行任何Objective-C代码,因为它不是异步安全的。请参阅本文有关它的更多信息:Reliable Crash Reporting
如果贴在你能为回答下列问题做一些更多的细节:Crash analytics and reporting for iOS和iOS crash log catch, debug info.. Catch and send via email to the Dev team
这是进行测试,或者公开发布? – 2012-08-16 14:58:28
@glennsayers这将是应用程序的公开发布 – GeekedOut 2012-08-16 15:00:07
我知道你正在寻找一个实时的崩溃报告系统,但苹果公司确实记录和汇总了应用程序中的崩溃报告,并且你可以在iTunes中访问它们随时连线。 – 2012-08-16 17:56:37