1. UITest & UnitTest
当开发完新需求的时候,在提测之前我们最好编写下UITest和UnitTest,覆盖主业务流程即可,可以提高我们的提测质量,减小一些可见的Bug,再加上冒烟用例,最大程度上提高我们提测的质量(成为KPI之王 - 😏),而且上线之后这些单元测试和UITest组件的脚本可以配合自动化测试定期进行回归测试,提高App的质量,减少崩溃率
2.NullSafe
绝大多数情况下,我们向NSNull对象发送消息,都会产生崩溃,NSNull对象常见于后台返回数据中可能会有null字段,很多JSON库都会转成NSNull对象,如下情况就会产生崩溃:

但是向nil对象发送消息则不会产生崩溃,这些可以参考NullSafe中的处理方法,重写
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector和- (void)forwardInvocation:(NSInvocation *)anInvocation这两个方法将没能力处理消息的方法签名转发给nil对象则不会产生崩溃
此外,常见的崩溃比如,NSArray取值越界,NSDictionary传了nil对象,这些问题产生的崩溃可以使用Runtime中的Method Swizzle,将原生的方法hook掉,如下:

这种解决方法可以避免诸如数组取值越界、字典传空值、removeObjectAtIndex等错误,如下的崩溃就可以避免:
id obj=nil;NSMutableDictionary*m_dict=[NSMutableDictionary dictionary];[dict setObject:obj forKey:@"666"];
网友评论