今是昨非

今是昨非

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

一次诡异的录音崩溃排查

背景#

上午突然有用户反馈,使用录音功能崩溃。起初以为是最近更新的 APP 新版本有问题,赶紧去排查。

排查#

首先在测试手机上,测试环境调试,发现并没有崩溃,长出了一口气,说明不是所有用户都有,不是新版本改出来的问题。

然后去听云后台看日志,发现崩溃的地方是初始化AVAudioRecorder的方法 ——[[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error];。很费解,只是简单的初始化方法,为什么会导致崩溃呢?

一开始猜测会不会是用户录音权限没开,导致开始录音的时候崩溃。尝试后发现如果权限关闭,在进入录音页面前就会提示权限未开启,去开启权限,并不能进入到录音步骤。

然后怀疑会不会是初始化的 url 为空,又或者机型不支持设置recordSettings中的某些参数?搜索后,发现有 url 为空崩溃的条目,所以这里大概率也是初始化的 url 为空。

继续排查,发现初始化的 url,是本地的缓存文件夹中 Audio 文件夹,并且文件名字是取日期 + 时分秒用于避免重复,格式为yyyyMMdd_HHmmss,这里按道理来说是不会出现空的问题的,所以究竟是哪里的问题;于是和用户沟通,用户反馈问题是今天出现的,之前是好的,最近有升级了 15.6.1 的系统。但是恰好手头的测试机也是 iOS 15.6.1,并没有出现崩溃的问题,说明和系统版本并无关系。

再排查,发现听云后台用户崩溃的日志显示的时间和用户反馈时录屏的时间不一致?会不会是修改了系统时间?但是系统时间修改会导致初始化AVAudioRecorder崩溃吗?不报太大的希望,尝试后发现,Yohoo,修改时间后,初始化录音还真会崩溃。。。神奇,哈哈哈,这可不是我的错,赶紧再去找用户

再去和用户沟通,用户反馈并没有修改时间,只是修改了日期显示从 24 小时制改为 12 小时制,what。。。难道。。。。赶紧再去验证,果然设置 12 小时制会导致崩溃。。。Why?日期格式yyyyMMdd_HHmmss可以兼容 12 小时没错,但是返回的字符串时20220829_上午104030,里面会有中文,而用这个中文去生成 NSURL 时,生成的就是 nil,然后 nil 取初始化AVAudioRecorder就导致了崩溃。。。😭还是我的锅,不多说了,赶紧修改

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.