使用 LogBrew Swift 0.1.6 或更高版本。上传调试构建产物需要原生 LogBrew CLI 0.1.24 或更高版本。
规划采集边界
确认应用何时能回放每种故障。
在构建前设置版本值。它必须能标识应用的版本号和构建号。SDK、dSYM 上传和问题筛选条件都要使用同一个值。
不要把用户数据、请求体或请求头附加到崩溃元数据中。
添加崩溃采集产品
首先为应用完成 SDK 接入。回放会使用其中的client 和 transport。
通过 Swift Package Manager 添加公开 SDK。
LogBrew 产品以发送遥测数据。只有当应用明确启用原生崩溃或卡顿采集时,才添加 LogBrewCrash。
采集集成支持 iOS 15 或更高版本。原生致命错误处理器作用于整个进程,因此应用只保留一个由自己持有的采集对象。
配置一个准确的标识
运行时设置和构建产物上传要使用相同的项目、版本、环境和服务。LogBrew 不会推导或替换这些值。NativeCrashConfiguration 有两个可选限制:
值超出范围时,配置会抛出
crash_invalid_configuration。
启用卡顿采集
当watchdog 为 nil 时,卡顿采集处于关闭状态。要启用它,在调用 install() 之前替换上面的 watchdog 声明:
artifactIdentity。缺少它时,配置会抛出 crash_invalid_configuration。
在进程的整个生命周期内只保留一个 crashCapture 对象。第二个采集对象无法安装,它的 install() 调用会抛出 crash_capture_owned。要修改阈值,在下次应用启动时使用新值。
已恢复的卡顿回放时,crash.handled 为 true。如果卡顿一直持续到进程被终止,回放时 crash.handled 为 false。
两种形式都包含数值型的 durationMs 元数据,并沿用致命崩溃帧所用的同一个构建产物标识。
应用处于非活跃状态或连接调试器时,卡顿监测器会暂停。设备处于严重过热状态时,它也会停止采集。
阈值过短可能会把正常的主线程工作报告为卡顿。使用你实际发布的构建配置测试阈值。已处理状态描述的是恢复情况,并不会把问题标记为已解决。已处理的卡顿同样阻塞过界面,所以也要查看。
启动后回放
安装采集对象后,通过 SDK 客户端回放待处理的报告。maxReplayBytes 的报告。检查全部 3 个计数。仅凭待处理计数为 0,不能证明已经送达。
如果失败的请求必须在再次重启后仍然保留,在回放前启用持久化投递。在常规的网络或身份验证恢复过程中,不要调用 purge()。
上传匹配的 dSYM
在启用调试信息的情况下归档应用。保留用户实际运行的那个构建的 dSYM。 检查它的镜像 UUID。--expect-image-uuid。如果发现的 UUID 集合与预期集合不一致,命令会失败。
检查账号访问权限。然后去掉 --dry-run,再运行同一条命令。
status 表示结果:
构建机器可以不使用账号访问,改用
LOGBREW_TOKEN 中的项目构建产物密钥上传。按创建构建产物密钥中的说明创建密钥。这种上传会报告 uploaded。之后使用账号访问核验每个标识:
status: "found" 表示已确认该构建产物。status: "missing" 表示 LogBrew 没有该标识对应的构建产物。
解析时匹配的是镜像 UUID 和完整的构建产物标识,而不是源文件名。同一份源码重新构建后,UUID 可能不同。上传对应构建的那个 dSYM 包,而不是整个构建目录。
验证 LogBrew 回读
使用相同的运行时范围筛选问题列表。此示例选择unresolved(未解决)问题。已解决或已归档的问题不会出现。
symbolication 对象。此示例只展示一个帧已解析的问题中的部分字段,不是完整响应。
查看崩溃证据
每个帧都有自己的status。symbolication.status 字段使用相同的值:
在你的记录中,把未解析的帧照实记为未解析。不要把它报告为空堆栈。
LogBrew 在你读取问题时解析帧。之后上传的 dSYM 可以解析较早事件的帧,但不能补上事件当时没有采集到的帧。
应用代码帧能缩小代码搜索范围,但不能证明原因。要查看操作记录(Breadcrumbs)、异常链和链路证据,读取问题排查结果:
source: "symbolicated" 的帧来自已上传的构建产物。带有 source: "captured" 的帧是应用发送的位置。响应字段请参阅排查问题。
每次读取都要保留完整的项目、版本、环境和服务范围。查找失败时,不要把范围扩大到其他项目。
验证生产环境接入
在已部署的构建中使用经过批准的测试故障。切勿把客户的操作当作触发条件。按顺序检查每一项,遇到第一个失败就停止:- 运行时标识与已上传的构建产物标识一致。
- 之后某次启动时回放了 1 个已确认的事件,已丢弃和待处理的报告都为 0。
- 限定范围的问题列表返回了该测试问题,且已处理状态符合预期。
- 预期的应用代码帧已解析。
- 之后再正常启动一次,不会新增发生记录。
安全恢复
一般的问题排查请参阅排查问题。
