今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

iOS beta4崩溃修改

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 () 此方法不能正常工作了。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。