ios - 是否有iPhone/iPad生态系统的可靠崩溃报告系统?

问题描述:

我知道在Android中,有一个相当可靠的内置系统来通知我发生崩溃。他们几乎立即将堆栈跟踪和一些其他信息写入Google文档。它的工作非常好。ios - 是否有iPhone/iPad生态系统的可靠崩溃报告系统?

我开始研究ios的同样的事情,我没有发现任何类似的东西同样有效。我读过这篇文章:Xcode storyboard: Why does the iPad storyboard show iPhone sized views?

但我不确定这是否仍然如此。任何人都可以推荐我在用户设备上使用哪些崩溃报告?

谢谢!

+0

这是进行测试,或者公开发布? – 2012-08-16 14:58:28

+0

@glennsayers这将是应用程序的公开发布 – GeekedOut 2012-08-16 15:00:07

+0

我知道你正在寻找一个实时的崩溃报告系统,但苹果公司确实记录和汇总了应用程序中的崩溃报告,并且你可以在iTunes中访问它们随时连线。 – 2012-08-16 17:56:37

我使用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也有一个很好的崩溃日志。

+0

谢谢,你的意思是说,你不仅仅是为了分析用户而使用乱七八糟的方式,但是他们也会在错误报告中提供帮助。 – GeekedOut 2012-08-16 15:14:53

+0

是的。 Flurry是某种(邪恶?)强大的数据收集器。但是它的服务非常棒。 – zeiteisen 2012-08-16 15:18:48

+0

哈哈..你是什么意思?我用它为我的Android应用程序,但它已经很无用。你如何在ios上使用它? – GeekedOut 2012-08-16 15:34:53

你可以做的是创建一个新的未捕获异常处理程序,然后通过NSSetUncaughtExceptionHandler进行注册。这样,每次崩溃都可以在杀死之前被拦截,并且可以将其记录下来并保存在某处上传。

(我个人用在这个环节中描述的方法:http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

+0

谢谢 - 正当我阅读cocoawithlove链接时,它表示这仅用于测试。苹果是否不允许在生产应用程序中使用?或者你是否能够在生产应用程序中保留该代码? – GeekedOut 2012-08-16 15:18:26

+0

当我们在AppStore上发布应用程序时,苹果公司没有透露有关它的任何信息,所以我想他们允许。 – 2012-08-21 13:59:00

设置uncaughtexception处理程序只会给你一个崩溃报告的子集,而且你获得的报告的细节非常有限。你不会得到所有线程的堆栈跟踪信息,你没有得到发生崩溃的异常的堆栈跟踪,并且你没有得到发生崩溃的代码的行号。此外,您不会收到由信号处理程序引起的任何崩溃报告。

另外,一旦发生崩溃,您不应该运行任何Objective-C代码,因为它不是异步安全的。请参阅本文有关它的更多信息:Reliable Crash Reporting

如果贴在你能为回答下列问题做一些更多的细节:Crash analytics and reporting for iOSiOS crash log catch, debug info.. Catch and send via email to the Dev team