iPhone開發 捕獲提交異常日志


近幾個月在公司安排和我個人的要求下,接觸了iPhone方面的開發,主要都是應用方面的,參與了兩個iPhone項目的開發,並且已經比較至AppStore了,終於可以休息一段時間了。大笑

項目開發中,經常遇到一個問題。每次辛苦的發布版本給測試人員測試后,收獲一推Bug,面對這些問題,有些問題還是很容易就找到的,那些很難重現的問題就讓人無語了。如果不是在模擬器上,又或者我們的設備沒有連接到PC上,那么如何調試我們的程序呢?如果應用已經發不到AppStore了,用戶在使用過程中出現了問題,我們當然希望能夠感知到這個問題,並在更新下個版本時修改和完善我們的應用。

這就引出一個需求:捕獲應用使用時出現的異常,提交至服務器或者開發者的郵箱。

廢話不多說,直接上代碼。

1、用於處理未被try...catch...捕獲的異常 

void UncaughtExceptionHandler(NSException *exception) {
    // 異常的堆棧信息
    NSArray *stackArray = [exception callStackSymbols];
    // 出現異常的原因
    NSString *reason = [exception reason];
    // 異常名稱
    NSString *name = [exception name];
    
    NSString *syserror = [NSString stringWithFormat:@"異常名稱:%@\n異常原因:%@\n異常堆棧信息:%@",name, reason, stackArray];
    NSLog(@"%@", syserror);
    
    // 發送異常至開發者的郵箱或者發送至服務器端
}

2、在應用啟動的地方替換系統原有的處理異常的Handler

// 保存系統處理異常的Handler
    _uncaughtExceptionHandler = NSGetUncaughtExceptionHandler();
    // 設置處理異常的Handler
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);

3、在應用退出時,還原異常處理的Handler

- (void)applicationWillTerminate:(UIApplication *)application
{
    // 還原為系統處理異常的Handler
    NSSetUncaughtExceptionHandler(_uncaughtExceptionHandler);
}

這樣,如果測試人員或者用戶發現崩潰性的問題,我們就很容易找到原因,並進行修正。

如果大家覺得這種策略有什么不足,可以留言討論。大笑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM