BayMaxProtector-集崩潰保護與頁面降級於一體的大白保護機制

Abstract:Crash protector -take care of your application like BayMaxgit

BayMaxProtector-github下載地址github

CocoaPod安裝方式:pod 'BayMaxProtector'web

1、what can BayMaxProtector do?

一、BayMaxProtector 能夠提升你App的穩定性,減小由於常見錯誤而引起的崩潰,目前支持的保護類型有四種,分別是UnrecognizedSelectorKVO(KVO重複添加、移除、或dealloc時未移除observer)、NSNotification(dealloc時未移除)NSTimer(去除了timer對target的強引用,target能夠自由釋放而不會產生崩潰,同時timer能夠自動invalid)這四種狀況。容器類的考慮到已經有較爲成熟的框架,便沒有加進來,若是後期有須要的話,再加入。緩存

二、BayMaxProtector不只爲你的應用提供崩潰保護的功能,而且還經過BayMaxDegradeAssist提供了一套頁面降級機制,按照該套機制的規則與約定,能夠實現頁面自動降級爲對應的H5頁面,也能夠實現頁面的手動降級。所謂自動降級,是指在程序發生UnrecognizedSelector錯誤時,會從配置中將該頁面對應的urlparams(注意:若是viewdidload方法中發生錯誤,而且消息接受者不是視圖控制器的話,獲取不到參數,其餘狀況均可以(如網絡null錯誤、解析錯誤、數據源model混亂等)),傳給外界,外界能夠經過這個展現對應的H5頁面。手動降級是指程序原本並無發生UnrecognizedSelector相關錯誤,可是因爲代碼業務邏輯發生錯誤,咱們須要強制換成對應的H5頁面,經過BayMaxDegradeAssist提供的接口,能夠輕鬆地作到這些,這樣就可以避免傳統的防崩潰機制致使的空轉狀態,所謂空轉是指程序不崩潰,可是沒法繼續進行接下來的業務邏輯。bash

三、BayMaxProtector將發生的錯誤封裝爲一個BayMaxCatchError對象,這個對象會根據不一樣的錯誤類型,將對應錯誤的描述信息打包,並經過統一的方式將錯誤信息回調給外界,外界能夠對錯誤進行分類處理。網絡

四、其餘功能你能夠本身探索app

2、how to use?

一、 安裝框架

手動方式:將BayMax文件夾下的內容拖入拖入項目。優化

CocoaPod方式:在podFile中添加 pod 'BayMaxProtector'ui

二、 Appdelegate 中設置你想要保護的類型(建議debug模式下不要開啓),保護的類型是枚舉類型,支持枚舉的或運算。

示例:
1、帶錯誤回調的全部類型
[BayMaxProtector openProtectionsOn:BayMaxProtectionTypeAll catchErrorHandler:^(BayMaxCatchError * _Nullable error) {
    if (error.errorType == BayMaxErrorTypeUnrecognizedSelector) {
        NSLog(@"ErrorUnRecognizedSelInfos:%@",error.errorInfos);

    }else if (error.errorType == BayMaxErrorTypeTimer){
        NSLog(@"ErrorTimerinfos:%@",error.errorInfos);


    }else if (error.errorType == BayMaxErrorTypeKVO){
        NSLog(@"ErrorKVOinfos:%@",error.errorInfos);

    }else{
        NSLog(@"infos:%@",error.errorInfos);
    }
}];

2、指定某一類型
[BayMaxProtector openProtectionsOn:BayMaxProtectionTypeUnrecognizedSelector];


3、組合類型
[BayMaxProtector openProtectionsOn:BayMaxProtectionTypeNotification|BayMaxProtectionTypeTimer];


4、過濾帶有指定前綴的類
[BayMaxProtector ignoreProtectionsOnClassesWithPrefix:@[@"UI",@"CA"]];

複製代碼

三、如何進行頁面降級?

一、引入`BayMaxDegradeAssist.h`頭文件。
二、設置數據源(BayMaxDegradeAssistDataSource)與事件回調代理(BayMaxDegradeAssistDelegate)
三、實現數據源代理BayMaxDegradeAssistDataSource,其中要實現四個`required`方法和一個`optional`方法
@required:
//共有多少組H5-iOS對應關係,一個視圖控制器對應一組關係
- (NSInteger)numberOfRelations;
//第index組iOS試圖控制器的名字
- (NSString *)nameOfViewControllerAtIndex:(NSInteger)index;
//第index組下試圖控制器對應的url
- (NSString *)urlOfViewControllerAtIndex:(NSInteger)index;
//第index組下H5與iOS之間參數的對應關係集合
- (NSArray<NSDictionary<NSString * , NSString *> *> *)correspondencesBetweenH5AndIOSParametersAtIndex:(NSInteger)index;

@optional://用來實現手動降級
//手動降級的某些頁面,處理後,最終仍是會走BayMaxDegradeAssistDelegate中的自動降級相關方法
- (NSArray *)viewControllersToDegradeInitiative;

四、實現BayMaxDegradeAssistDelegate,其中有兩個可選方法,在這裏能夠獲取到發生錯誤的視圖控制器實例或者類,以及該頁面對應的帶參數的完整URL或者不帶參數的URL,和配置中該視圖控制器對應的全部信息。外界能夠針對這兩種狀況分別處理,因爲手動降級最終仍是走的自動降級,因此只須要處理自動降級的代理事件便可。

// 非viewdidload方法出錯,能夠獲取當前頁面對應的H5完整url(帶參數),而後進行頁面降級,展現本身的webview
- (void)autoDegradeInstanceOfViewController:(UIViewController *)degradeVC ifErrorHappensInProcessExceptViewDidLoadWithReplacedCompleteURL:(NSString *)completeURL relation:(NSDictionary *)relation;

//在viewdidload方法中出錯,能夠獲取出錯頁面對應的不完整url(不帶參數),而後進行頁面降級,展現本身的webview
- (void)autoDegradeClassOfViewController:(Class)degradeCls ifErrorHappensInViewDidLoadProcessWithReplacedURL:(NSString *)URL relation:(NSDictionary *)relation;

五、流程:啓動App->請求配置或者從緩存中讀取配置->調用`BayMaxDegradeAssist`的`reloadRelations`方法

複製代碼

3、why BayMax Can do This?

主要參考了網易的健康系統,踩了一些坑,加了一些新的東西進來,然而目前還有不少須要優化的地方,會不斷完善。

歡迎加入BayMaxProtector交流羣,羣聊號碼:466377115

相關文章
相關標籤/搜索