克魔助手
全部文章

为什么只有那一台手机会出问题?

4 分钟阅读设备调试

每个团队都遇到过这样的问题:在某一台手机上稳定复现,在其他设备上从未出现,而且「用户操作有误」之类的解释也站不住脚。

这类问题几乎从来不是玄学,几乎总是源于某项未被列出的设备状态差异。下面的清单大致按「最终被证明是原因」的频率排序。

1. 系统版本

这是第一个应检查、也最常被跳过的项目,因为大家都以为自己已经知道了。小版本更新改变系统行为的频率比想象中更高,涉及 WebKit、网络栈、键盘、后台调度,以及进程可用的内存上限。

请获取准确的构建版本号,而不是「iOS 17」。17.4 和 17.4.1 是两套不同的软件。

2. 剩余存储空间

存储空间即将用尽的设备,会以各种看似与存储无关的方式出现问题:

  • 写入失败,取决于错误处理方式,有时会静默失败
  • 缓存刚写入就被回收,看起来缓存完全没有生效
  • 安装 App 时中途失败
  • 系统更积极地终止后台进程

请询问设备的剩余空间。如果低于 2~3 GB,应将其列为首要怀疑对象。

3. 发热状态

发热的手机会降频。如果设备戴着保护壳、放在阳光直射的桌面上,或已连续采集了 20 分钟,它的运行速度就会比同型号的常温设备更慢。

典型特征是:使用时间越长问题越严重,放置冷却 10 分钟后又恢复正常。

4. 电池健康度

老化的电池无法像新电池那样提供峰值电流,iOS 会限制性能以避免意外关机。一台电池容量 78%、循环 900 次的设备,与同型号容量 100% 的设备表现并不相同。

请查看电池容量和循环次数,不要停留在「电池看起来还行」。

5. 描述文件

这是最少被检查、却可能导致最奇怪结果的一项。描述文件可以安装根证书、将流量导入 VPN、禁用某项系统功能,或将设备纳入带有自身策略的 MDM 管理。

如果某台设备上装有一个您不知道的 VPN 描述文件,那么该设备上所有与网络相关的现象都不可信:地区判断不同、延迟不同,在其他设备上成功的请求在这里失败。

6. 语言、地区与区域格式

涉及数字格式、日期解析、文字方向、排序规则,以及界面上每个字符串的长度。「只在德语环境下布局错乱」是真实存在的一类问题,「只在使用其他历法的地区日期解析失败」也是。

7. 辅助功能设置

更大字体、粗体文本、减弱动态效果、降低透明度、增强对比度、旁白。每一项都会改变布局或行为,而且在真实用户中都相当常见。「只在那台手机上出现」往往意味着「只在动态字体调到最大时出现」。

8. 时间与时区

手动设置过时钟的设备,或位于国际日期变更线另一侧时区的设备,会暴露日期处理中的所有差一错误。缓存过期、令牌刷新、「今日」内容都是常见的受影响场景。

9. 网络

不只是 Wi-Fi 与蜂窝网络的区别,还包括强制门户认证、纯 IPv6 运营商网络、企业 DNS、应用级 VPN、低数据模式。仅低数据模式就会关闭后台刷新、降低视频码率,行为差异很大,而设备上看不出任何异常。

10. 机型与内存

3 GB 内存的手机可用的内存配额小于 8 GB 的机型。在旗舰机上正常运行的代码,在低配机型上可能被 jetsam 终止,表现为一份没有异常信息的崩溃报告。屏幕尺寸和安全区域边距也属于这一类。

排查步骤

  1. 操作前先记录设备状态。 包括 iOS 构建版本号、存储空间、电池健康度与循环次数、已安装的描述文件、地区与语言、辅助功能设置。一半的排查到这一步就结束了。
  2. 找出差异。 与一台无法复现问题的设备逐项对比。
  3. 在其他设备上复现这一差异。 例如怀疑是存储问题,就把另一台设备的存储空间占满。这一步将猜测变为结论。
  4. 再查看日志和采集结果。 此时您已经知道要找什么。

清单之外的情况

有时原因确实在用户的数据中:一个有五万条记录的账号、一个损坏的本地数据库,或一次从两年前版本开始、中途中断的数据迁移。当所有设备属性都一致,问题却跟着用户而不是跟着设备走时,请查看 App 存储的数据,答案就在沙盒里。