iOS beta4崩溃修改
前言
升级iOSBeta4后,有用户反馈使用我们APP时会崩溃,有登录的、查看详情的,都会出现崩溃。我们查看Bugly数据也发现崩溃率上升了0.02%,直接超出了指定的崩溃指标。虽然是由于升级beta版系统导致的,但还是要排查出具体原因,然后尽快适配。所以我说一下我发现的哪个API导致的,供大家参考一下。
排查
由于崩溃是必现的,所以排查起来很容易,找一台升级了iOS14 beta4的手机,然后复现步骤,看具体崩溃的地方,即可
我们APP是由于使用了SexyJson这个库,其中SexyJsonProtocol这个类第67行中sexyToValue()的方法里使用AnyRandomAccessCollection这个地方有强制解包属性,在之前的系统版本中,这个地方返回的值不为空,所以没有问题,但是在这个版本里,这个属性返回为空了,就导致了新系统中的崩溃。
如图所示位置:
修改
由于是强制解包导致的,所以直接的修改就是,把这个地方的强制解包,改为if let的格式,修改后,运行,binggo,崩溃确实没了。但是在验证过程中,由于我们使用这个是把请求的对象转为参数字典,这个地方虽然不崩溃了,但是正常应该存在的值,也还是没有,换句话说,就是所有请求中使用这个方法转字典的,都失败了。。。。怕不怕,还好我们这个地方有报错直接抛出来了,要不然真的以为改好了就这么上线,服务端的就会骂人了,因为会发现接口错误率刚刚地。仔细分析这个地方实现后,发现其实是使用Mirror来获取类中所有属性生成字典,一步步调试会发现,其实Mirror类还是正常工作的,mirror.children也是不受影响的,but,AnyRandomAccessCollection(mirror.children)就返回空了,所有就是AnyRandomAccessCollection()这个方法在iOS14 beta4中不能正常工作了。于是再次修改
如图所示,第一次修改:
第二次修改:
最后
所以我们项目里在iOS14 beta4中的崩溃是由于SexyJson库中的强制解包导致的,但是真正的原因是iOS14 beta4中AnyRandomAccessCollection()此方法不能正常工作了。