iOS技术

解析苹果审核反馈崩溃日志 .txt 文件

2022-01-21  本文已影响0人  大菠萝_DABLO

最近 App 提交新版本因为 crash 审核被拒了,记录一下解决的过程。

1. 尝试复现

苹果邮件说是在 iOS15.1 的 iPad 设备发生了 crash,附带了几个 crashlog-xxx.txt 文件。一般情况,苹果会附带对应页面的截图,这次只有 .txt 文件,那么说明可能是装上 App 后刚打开就发生了 crash。

首先咱们尝试复现,如果可以复现,那就好办了。结果并不能复现... 那只能通过解析 .txt 文件来定位问题了。

2.解析文件

网上搜到的方法大多都是通过 Xcode 自带的 symbolicatecrash 工具来解析,试了好几次都不成功... 后面发现可以直接用 Xcode 打开定位到具体代码。首先把 .txt 文件后缀名改为 .crash,鼠标右键选择 Xcode 打开

图片

然后选择对应的项目

图片

打开后就直接定位到有问题的代码处

图片 图片

3.解决问题

定位到代码后,接下来的任务就是解决它。这段代码逻辑是在网络请求UA后面添加一个时间戳,用来判断请求是否有效,防止爬虫。问题应该就出在 SecItemDelete((__bridge CFDictionaryRef)publicKey); 这个地方,搜索iOS15.1 SecItemDelete crash然而并没有得到有用的信息。

此时陷入了困境,首先不能100%确定是这块逻辑引发的 crash,不过后端同学告诉这块逻辑后端还没有启用,那么瞎猫碰耗子,把这块代码注释了重新提交审核试一试。

第二天,新版本审核通过了,果然就是这块代码逻辑的问题。可是问题究竟出在哪里呢?

4.追踪溯源

在重新搜索的过程中,有一篇文章引起了我的注意 《解决 iOS 15 上 APP 莫名其妙地退出登录》,说是 从iOS 15开始,系统可能决定在用户实际尝试打开你的应用程序之前对其进行 “预热”,这可能会增加受保护的数据在你认为应该无法使用的时候的被访问概率 看来应该就是这个原因导致的 crash。为了验证,修改代码逻辑后再次提交一个新版本。

internal func uaToken() -> String {
    if UIApplication.shared.isProtectedDataAvailable {
        let key = "xxxx"
        let time = ("\(Date().timeIntervalSince1970 * 1000)" as NSString).integerValue
        return RSA.encryptString("\(time)", publicKey: key)
    } else {
        return ""
    }
}

第二天也通过审核了,终于解决了问题。

上一篇 下一篇

猜你喜欢

热点阅读