回退?降级?熔断? CrashFallbackCore模块

当前苹果已禁止热更新补丁,如果线上出现紧急,致命的错误怎么办?立即修复发版?即使立即进行修复再加上审核最快也需要1,2天时间,在这1,2时间里可能会产生很大损失和影响,同样在这段时间内我们只能看着错误的发生等待着新版发布修复

场景

我们在实现一个页面或业务功能时候通常会依赖一些其它场景,内部逻辑方法等等, 如图
1
用户触发进入某个基金持有详情页, 在基金持有详情页会包含一些数据展现和业务功能如请求本页面数据, 进入基金详情介绍场景, 进入买入场景等,如果其中任何一个功能或服务出现错误问题会造成用户触发后出现错误,甚至导致整个APP闪退等问题,如图
2

CrashFallbackCore

CrashFallbackCore通过以方法,函数为最小颗粒度按下发的规则进行拦截隔离处理,降级处理等操作
如上面的场景,基金详情页出现错而用户正好点击触发进入基金详情页,CrashFallbackCore会根据定义的规则进行拦截并自动进入降级处理操作,如下图
3
降级处理可采用多种形式如弹出信息框告知用户, 切换到指定预设场景, 跳转到默认降级H5页面等

通过使用CrashFallbackCore我们可方便有效的防止错误的发生,同时使系统具有自动降级处理效果

实现机制

在Objective C的方法调用过程中当无法响应一个selector时,在抛出异常之前会先进入系统消息转发机制(官方文档:Message Forwarding), 消息转发过程会经历Method resolution,Fast forwarding,Normal forwarding,CrashFallbackCore内部核心机制是对消息转发最后一步forwardInvocation进行HOOK

CrashFallbackCore首先加载规则文件,根据配置的规则文件生成规则列表,再根据规则列表对已配置的类和方法进行forwardInvocation替换(替换为内部CFForwardInvocation方法),系统运行过程中当触发到对应的配置时将会进入内部CFForwardInvocation方法,在CFForwardInvocation方法中根据对应的配置规矩进行处理

效果

-w368

-w368