之前一直用 Xcode Console 看 App 的实时日志——设备连上 Mac,打开 Xcode,在 Devices 窗口里等着日志流输出。但在几个场景下不太方便:一是 Xcode 索引项目时 Console 会卡,二是只想看某个特定 App 的输出时日志流里混了大量系统消息,三是手边只有 Windows 电脑或不想每次都开 Xcode。后来试了试其他方案,发现 iOS 日志查看这块其实有几种不同的选择,按场景来选会更顺手。

Xcode Console 的基本用法

Xcode Console 是 iOS 开发最常用的日志查看方式。设备连上 Mac,在 Xcode 的 Device and Simulators 窗口里选连接设备,就能看到实时日志输出。支持按进程筛选,也能用搜索框过滤关键词。优点是 Xcode 开发的同学装好就用、零额外配置。缺点是 Xcode 启动慢、索引大项目时 Console 会卡住、日志量大时筛选不太顺手,而且只能在 Mac 上用。另外 Xcode Console 主要显示 NSLog 输出,printf 和 OSLog 的日志需要额外配置才能看到。

如果项目用 OSLog 框架,可以通过终端命令 log stream --level debug 获取更完整的日志输出,效果比 Console 更细,但要记住一堆参数。

用 KeyMob 查看实时日志

KeyMob 的实时日志功能入口在左侧导航栏的"实时日志"模块。点击绿色的开始按钮后,工具开始输出 iOS 设备的日志流。和 Xcode Console 相比有几点区别:

一是可以设置只抓包含特定关键词的日志,减少无关消息的干扰。二是支持指定 App 过滤——在日志列表里选中目标 App,只显示该进程的输出。三是 Xcode Console 主要显示 NSLog 输出的日志,而 KeyMob 在应用管理模式下选择"运行"可以看到 App 内 NSLog、printf 等函数的完整输出,选择"实时日志"则专注显示 NSLog 的日志。四是不依赖 Mac,在 Windows 和 Linux 上同样可以连接 iOS 设备查看日志,适合团队里不同平台的开发者使用。

日志查看之外,KeyMob 的崩溃日志模块可以导出设备上的 crash report。命名格式是"应用名-日期-时间.ips",选中后直接查看崩溃堆栈内容,不需要手动跑 symbolicatecrash 命令做符号化。对于线上问题的回溯分析比较实用,省掉了从设备同步崩溃日志再到解析的中间步骤。

什么场景用哪种

日常开发调试时,搭配 Xcode 用 Console 看日志最直接,不用额外配置。脱离 Xcode 环境(Windows 调试、快速日志定位)或者需要精细过滤指定 App 输出时,用 KeyMob 这类独立工具更灵活。排查线上崩溃日志时,走 KeyMob 的崩溃日志模块或者第三方崩溃报告平台分工配合就行。