
App 因服務(wù)端數(shù)據(jù)返回異常、未實(shí)現(xiàn)方法等問(wèn)題造成的crash比比皆是, 雖然有經(jīng)驗(yàn)的猿可以通過(guò)一些 if 判斷加層保護(hù),但是總覺(jué)得不夠優(yōu)雅;而且如果面對(duì)前猿留下的代碼呢... 顯然一個(gè)個(gè)加判斷有點(diǎn)力不從心...
在此問(wèn)題的基礎(chǔ)上有幸看到了此作者的文章 ->戳這里 ,很全面的分析了造成crash的種種原因,在此不再啰嗦... 但是遺憾的是, 作者并未開(kāi)源代碼 ...
基于以上情形,本人的QYCrashProtector(崩潰保護(hù)工具)就誕生了?。。?開(kāi)源,但有不完善的地方,希望各位小伙伴看到后積極提出寶貴意見(jiàn),讓我們共同努力,對(duì)crash say goodbye ~
在此感謝@ibireme?。?! 工具中的timer保護(hù)類(lèi),引用了 YYWeakProxy 類(lèi)打破retainCycle.
(因 QYCrashProtector 庫(kù)中引入的YYWeakProxy 會(huì)和 YYKit 庫(kù)重名沖突, 特此把項(xiàng)目中引入的 YYWeakProxy 更名處理.)
使用方法:
可以在程序一啟動(dòng)就在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中開(kāi)啟crash保護(hù);
當(dāng)然也可以在想要開(kāi)啟的任意地方開(kāi)啟, 早開(kāi)早用;
開(kāi)啟方法:
- Step 1:導(dǎo)入頭文件:
#import <QYCrashProtector.h>; - Step 2:
[QYCrashProtector qy_openAllCrashProtector];開(kāi)啟所有類(lèi)型保護(hù)。
注意事項(xiàng):
- 該工具的開(kāi)放入口為
#import <QYCrashProtector.h>, 只需導(dǎo)入該頭文件就可使用所有功能; - 類(lèi)
QYCrashProtector.h中有對(duì)應(yīng)的開(kāi)啟保護(hù)類(lèi)型的方法,可自行搭配; - 本工具主要采用了
method swizzling的方式, 原工程不需要任何修改; - 目前支持 timer/ unrecognized selector/ NSArray/NSMutableArray/NSDictionary/NSMutableDictionary/NSCache / String系列/等保護(hù);
- 因KVO、NSNotification、BAD_ACCESS的保護(hù)方法存在一些問(wèn)題,暫未提供;
- 當(dāng)捕捉到異常時(shí),會(huì)通過(guò)
QYErrorLog類(lèi)中的相關(guān)方法打印出來(lái); - 每種類(lèi)型的保護(hù)放在對(duì)應(yīng)的分類(lèi)中,便于拓展維護(hù)。
詳情請(qǐng)查看源碼。
Example:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// open all crash protector.
[QYCrashProtector qy_openAllCrashProtector];
// or:
// open unrecognized selector protector.
[QYCrashProtector qy_openCrashProtector_unrecognized_selector];
// open timer protector.
[QYCrashProtector qy_openCrashProtector_timer];
// open container protector.
[QYCrashProtector qy_openCrashProtector_container];
// open string protector.
[QYCrashProtector qy_openCrashProtector_string];
// open UI protector.
[QYCrashProtector qy_openCrashProtector_UI];
...
這個(gè)防止程序崩潰的庫(kù)支持Cocoapods。
pod 'QYCrashProtector'
源碼放在GitHub上了,想查看的小伙伴可以->戳這里。
千里之行,始于足下。