iOS Crash防护crash-debugcrash

iOS Crash防护你看这个就够了 - 上篇

2021-05-06  本文已影响0人  茉莉儿

0x1 为什么要做Crash防护

在产品开发过程中Crash率是一个很重要的指标,也是一个团队中几乎所有的部门都应该关注或者去参与提升的一个指标,他不仅代表着整个产品的质量,也是一个团队整体技术能力的体现。更低的Crash率不但能让产品获得更好的用户口碑,在整个流程中也能让团队成员获得更多的成长,加深对iOS系统底层的理解,为今后的开发带了更大的帮助。

image

0x2 为什么要写这篇文章

起因也是因为自己的项目踩了FB的SDK的坑:2020.7.10,FB后台下发数据错误,导致大量使用FB SDK的App发生启动Crash,影响用户之多,范围之大,再加上当时包括我们的大部分App也缺乏相关的防护或者是容错处理,Crash率瞬间飙升,重新发版又要走发布流程,只能依赖FB后台的修复,当时束手无策十分被动,所以决定自己做一套较为完整的Crash防护体系,来避免这样的场景再次发生。第二个目的就是,发生问题后我也第一之间查阅了网上的一些资料和其他团队的做法,发现大家的方式各有千秋,方法不同,效果不同,所以我也决定把市面上能找到的好的思路和方法再结合自己的一些想法和经验记录下来。最后也是因为知识是要沉淀、积累和分享的,也算是巩固和加深自己的理解吧。

0x3 怎么做

其实当时Crash的场景很简单,本来一个Dictionary参数FB后台却下发了个String类型的数据,这样一来解析时候必然会Crash,解决的话其实只要做一层参数安全校验即可。

image image

但是这么简单的问题,大部分App都没处理好,证明在流程上一定有大家注意不到的地方,暴露出来的只是冰山一角,我们机制一定存在着某种问题,或者存在可以优化的地方。

要想避免这种情况,就要先梳理出处理Crash的流程:

I:Crash处理流程

image

在iOS系统中基本可以总结出这四个步骤,

II:Crash防护

Crash防护方式主要分两种:针对非内存问题通常采用AOP方式,内存问题采用zombie对象的方式,

image
image

AOP:

iOS中AOP的相关知识网上线程的代码也很多,这里就不在赘述,但是在AOP这种频繁调用的场景中就需要注意的地方和坑点比较多。

Zombie:

使用僵尸对象来解决内存问题一直是苹果主推的方式,Xcode也有相关设置,在Debug下打开相应开关,但是一旦把该功能放到线上做防护或监控就要考虑很多的问题。

上一篇 下一篇

猜你喜欢

热点阅读