更新时间:2023.05.18 17:58:40
崩溃防护iOS提供异常崩溃的保护,可有效避免用户闪退,规避常规问题的大规模崩溃,增加App稳定性,提升用户体验。异常防护的集成对业务代码没有任何侵入性,能够有效的防止问题的发生,并将问题上报到平台,帮助您及时发现问题。
该功能中的统计数据为崩溃防护帮助应用拦截的异常,但后续仍需要对issue做处理和修复。
仅iOS支持异常崩溃防护。
您可以通过以下筛选条件进行数据筛选。
支持的筛选维度:
时间、崩溃详情、设备ID、issue新增状态、前后台、越狱状态、系统版本、机型、APP版本、APP小版本号、APM SDK版本、下载渠道、省份、使用时长、机型评分、解析情况、APP页面、issue状态、处理人、标签、自定义维度、PV自定义维度。
指标说明:
指标 | 说明 |
---|---|
拦截崩溃次数 | 已成功拦截的崩溃的次数 |
拦截崩溃率 | 筛选条件下的拦截崩溃次数/筛选条件下的总launch数 |
拦截崩溃人数 | 筛选条件下的去重拦截崩溃人数 |
拦截崩溃用户比例 | 筛选条件下发生拦截崩溃错误的去重UV数/筛选条件下的去重总UV数 |
用户数 | 筛选条件下已拦截崩溃的去重UV数 |
崩溃拦截分布展示了已拦截的异常崩溃在系统版本、机型、APP版本、APP小版本号等维度的分布。
列表中展示了这类拦截异常崩溃的issue影响用户数、发生次数、最近发生时间和日志上报时间等信息。
详情崩溃趋势展示了该issue的崩溃数和影响用户数两个指标的变化趋势。详情拦截崩溃趋势图和列表拦截崩溃趋势不同:
详细信息可以查询单次crash的各字段属性。单击设备标识ID或UserID旁的追查可跳转至日志查询以查询完整的上下文日志流。通过右上角,可切换crash。
参数说明如下所示。
Key | Value |
---|---|
reason | 根据现场情况分析给的结果 |
protect_type | 防护崩溃的类型所在的子模块 |
在符号表页面,手动上传符号表。
现场数据展示了发生崩溃防护时的程序运行状态。
自定义日志支持回捞、上报自定义的日志内容,包括进程-线程信息、日志级别、日志详情内容,并支持检索筛选。
Podfile中增加CrashProtector模块。详情请参见iOS接入。
在SDK上报配置中,支持修改崩溃防护采样率。
在SDK上报配置中,支持修改崩溃防护子模块。
各个模块与值的对应关系,如下表所示。
子模块功能 | 下发值 | 含义 | 默认状态 |
---|---|---|---|
关闭所有功能 | 0 | ✘ | |
USEL | 1(1<<0) | Unrecognized Selector防护 | ✔ |
Container | 2(1<<1) | 容器防护 | ✔ |
Notification | 4(1<<2) | 通知中心防护 | ✔ |
KVO | 8(1<<3) | KVO防护 | ✔ |
KVC | 16(1<<4) | KVC防护 | ✔ |
NSUserefaults | 32(1<<5) | NSUserDefaults防护 | ✔ |
开启所有功能 | 63(0b 0011 1111) | ✔ | |
值计算公式为:finalValue = 开启功能1的下发值 | 开启功能2的下发值 | ... | 开启功能n的下发值。 |
例如:
1<<0 |
1<<2 |
1<<3 |
1<<4 |
1<<5
在SDK上报配置中,支持修改数组创建防护逻辑规则。
在数据创建时,如果传入对象有nil时,系统会产生崩溃。崩溃防护接入后系统不会产生崩溃,但默认情况下,返回的数组为nil。
模式 | 平台字段 | 默认状态 |
---|---|---|
严格模式 | 优先保证数组索引的正确性。创建数组时,若传入的值包含空值,则创建的数组为空。
| ✔ |
兼容模式 | 优先保证数组创建成功。创建数组时,若传入的值包含空值,则剔除其中的空值,并创建数组。
| ✘ |
类型 | 说明 |
---|---|
USEL | unrecognized selector,防护因调用未实现方法造成的崩溃。 |
Container | 防护Foundation基础类型(NSString、NSMutableString、NSAttributedString、NSMutableAttributedString、NSArray、NSMutableArray、NSDictionary、NSMutableDictionary)的常用方法,可以防护由于传参不当(比如:数组越界、参数为空等)导致的崩溃。 |
Notification | 通知中心防护。 |
KVC | 利用运行时获取和设置参数的一种方式,使用中若操作的对象不存在对应的key则会造成崩溃,KVC防护就是针对该类型的防护。 |
KVO | 系统提供的监听某一对象属相变化的功能,但在使用中可能存在诸多隐藏问题,KVO防护就是针对该类型的防护。 |
NSUserefaults | 对NSUserefaults进行防护,防止因写入非标准类型造成的崩溃。 |