1.
准备工作:所需工具与权限
- Mac(macOS)一台,已安装最新 Xcode 与 Wireshark(或 tcpdump)。
- 安装 libimobiledevice 套件(idevicesyslog)、Homebrew 可简化安装。
- 获取 iPhone 的 UDID(通过 Xcode → Window → Devices and Simulators 或用 idevice_id)。
- 确保设备可连接到网络并允许信任所连接的 Mac(首次连接需在手机上点击“信任”)。
2.
步骤一:确认复现场景并记录前提信息
- 在采集前记录问题复现前后的时间点(精确到秒)和设备信息(机型、iOS 版本、App 版本)。
- 记录网络环境(Wi-Fi 名称、是否使用蜂窝、是否使用 VPN、路由器信息、NAT 类型)。
- 如果可以,准备一个可重复的触发步骤(进入某个地图、和好友互动、切换账号等),便于对比日志。
3.
步骤二:使用 Console.app 实时抓取系统日志
- 在 Mac 上打开 Console(控制台)应用。连接设备后在左侧 Devices 下选择你的 iPhone。
- 在搜索栏输入应用的 bundle id(例如 com.tgc.sky)或进程名“Sky”来过滤日志。
- 让用户复现“服务器链接已断开”问题,同时在 Console 中导出该时间段的日志(File → Save)。
4.
步骤三:用 idevicesyslog 获取实时系统日志(命令行)
- 安装(若通过 Homebrew):
brew install --HEAD libimobiledevice
brew install ideviceinstaller
- 运行实时日志(在终端):
idevicesyslog | grep -i "Sky\|com.tgc.sky\|network"
- 保存到文件,便于后续分析:
idevicesyslog > sky_syslog_$(date +%s).log
- 优点:可在终端中实时筛选关键字,方便自动化脚本采集。
5.
步骤四:通过 Xcode 获取崩溃与设备日志
- 打开 Xcode → Window → Devices and Simulators,选择你的设备。
- 在 Installed Apps 下选择目标 App,点击齿轮图标可下载 Container 或者点击 View Device Logs 获取崩溃日志。
- 导出的崩溃日志位于 ~/Library/Logs/CrashReporter/MobileDevice/<设备名>/,拷贝并与服务器端时间戳对齐。
6.
步骤五:网络抓包(通过 rvictl + tcpdump/Wireshark)
- 在 macOS 终端启用远程虚拟接口(需 Xcode):
sudo /Applications/Xcode.app/Contents/Developer/usr/bin/rvictl -s
- 使用 tcpdump 抓 rvi 接口流量(以 pcap 保存):
sudo tcpdump -i rvi0 -w sky_capture_$(date +%s).pcap
- 或者直接在 Wireshark 中选择 rvi0 接口进行可视化分析,使用过滤表达式(例如 ip.addr==服务器IP 或 tls.handshake.type==1)。
- 抓包要同时记录开始/结束时间、App 操作步骤,便于在 pcap 中定位异常连接断开的 TCP/RST、TLS 断开或长时间重传。
7.
步骤六:服务器端日志关联(运维侧)
- 与后端同事协同获取服务器时间段内的连接日志:nginx、负载均衡、游戏服务器进程日志。
- 关键字段:client IP、连接时间、session id、用户 token、请求路径、TLS 握手/证书异常、证书到期或 ALPN 问题。
- 将客户端抓到的网络五元组(源IP:port、目标IP:port、协议、时间)提供给后端用于双向对照。
8.
步骤七:日志整理与分析方法
- 时间同步:确保 mac 与服务器时间同步(NTP),所有日志换算到统一 UTC 或本地时区。
- 逐步排查:先看网络层(tcp retransmit、RST、ICMP),再看 TLS(握手失败、证书验证),最后看应用层日志(断线、重试、超时)。
- 使用工具:Wireshark 分析 pcap,Console/idevicesyslog+grep 过滤,grep/awk/sed 快速定位关键字。
9.
步骤八:特殊情况与替代方案
- 不能使用 rvictl(没有 Mac 权限)时,建议让用户通过 iOS 的“Analytics & Improvements”上传诊断信息,或通过 TestFlight 收集崩溃日志。
- 若需要更深层的 TLS 报文解密,需在开发环境使用可控证书与私钥(生产环境不可随意解密客户端流量)。
- 对于线上不可控用户,提供详细的日志采集指引与一键上报脚本可提高采集成功率。
10.
问:实时抓到“服务器链接已断开”时,最关键的三项日志是什么?
- 答要点:1) 设备端系统日志(idevicesyslog/Console)中显示的连接断开与错误码;2) 网络抓包(pcap)中 TCP/TLS 的断开/重传信息;3) 服务器端连接/鉴权日志(session/token失效或后端返回的错误码)。
11.
问:如何定位是客户端网络问题还是服务器端异常?
- 答要点:先看 pcap:若看到客户端发起重试却收不到 ACK/出现大量重传/ARP失败,倾向客户端或中间网络问题;若 TCP/TLS 握手成功但应用返回错误或服务器日志显示异常,倾向服务器侧。最终以双向日志对齐为准。
12.
问:抓包时有哪些需要注意的合规与隐私问题?
- 答要点:抓包可能包含敏感信息(token、个人数据),仅在获得用户或法务许可下操作;生产环境严禁在未授权情况下解密 TLS,采集后要对敏感字段脱敏并按公司数据保留策略保存与传输日志。
来源:运维视角分析光遇ios服务器链接已断开后的日志采集方法