2012-08-16 61 views
3

我知道在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

回答

3

我使用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

3

你可以做的是創建一個新的未捕獲異常處理程序,然後通過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

2

設置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