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

相关文章
相关标签/搜索