作为开发者,多数工作其实是在 Mac 上完成的。本页给你两条在 Mac 上调试 iOS 网络流量的官方可行路径:
- 方案 A:RVI —— 在 Mac 上直接抓 iPhone 真机流量(Apple 官方推荐)
- 方案 B:
make run_mac—— 本项目提供的 Mac 侧本地代理 CLI(复用与 iOS 完全相同的代理栈)
方案 A:RVI — 在 Mac 上直接抓 iPhone 真机流量
Apple 官方提供了 Remote Virtual Interface (RVI):把 iPhone 通过 USB 连接 Mac 后,
Mac 上会出现一张叫 rvi0 的虚拟网卡,你在这张网卡上抓到的就是 iPhone 的真实流量。
这是调试"线上 App 在真机上的网络行为"最准确的方法,因为抓的就是线上运行的同一份代码、同一份流量。
前置
- iPhone 通过 USB / USB-C 线连接到 Mac
- Mac 上安装了 Xcode(
rvictl随 Xcode 附带) - 首次连接 iPhone 后需要在手机上点击"信任此电脑"
步骤
# 1. 查看设备 UDID
idevice_id -l
# 或
system_profiler SPUSBDataType | grep "Serial Number"
# 2. 创建 RVI (替换成你的 UDID)
rvictl -s <UDID>
# 3. 用 tcpdump 抓包
sudo tcpdump -i rvi0 -w iphone-traffic.pcap
# 或直接用 Wireshark:选中 rvi0 网卡即可
# 4. 用完关闭
rvictl -x <UDID>
典型工作流
- Mac 上打开 Wireshark,选
rvi0网卡 - iPhone 上打开你的 App(或"简单抓包"本身)
- 复现要调试的操作
- 回到 Wireshark 查看所有 TCP/UDP 交互;如果是 HTTPS,配合 MITM 根证书可以看明文
注意:RVI 只能抓 iPhone 的流量,不能"在 Mac 上运行 iOS App"。
本 App 自带 Network Extension (Packet Tunnel),Apple 不允许它以"Designed for iPhone on Mac"形式运行。
方案 B:make run_mac — Mac 侧本地代理 CLI
本项目提供了一个 Mac 原生 CLI simplemultiapp-mac,
它复用与 iOS 版 完全相同的 CoreLogic + leaf 代理引擎,
在 Mac 上启动一个本地 SOCKS5 监听端口。你可以把 curl / Wireshark / Proxyman / Charles
指向它,从而在 Mac 上直接调试"本 App 的代理行为 + 规则匹配 + 订阅解析"等逻辑。
构建前置
- Rust 工具链(
rustup/cargo) - leaf 源码 clone 到本项目相邻目录:
git clone https://github.com/eycorsican/leaf.git ../leaf - macOS 13+
一键运行
# 默认:127.0.0.1:1080,使用内置预设节点
make run_mac
# 指定端口
PORT=7890 make run_mac
# 使用订阅
SUBSCRIPTION_URL="https://uni.sonicjs.com/inspired/sub?token=XXXX" make run_mac
# 使用本地 leaf 配置
CONFIG=/path/to/leaf.conf make run_mac
验证
curl -x socks5h://127.0.0.1:1080 https://httpbin.org/ip
配合 Proxyman / Charles 抓 HTTPS
- Proxyman/Charles 打开,设置系统代理 (macOS 会自动)
- 在 Proxyman 的 External Proxy 里把 upstream SOCKS 设为
127.0.0.1:<PORT> - 所有 HTTPS 请求就会先走 leaf 代理,再由 Proxyman MITM 解密
架构说明
这个 CLI 不会触碰系统 VPN / Network Extension —— 它只在本地开一个 SOCKS5 端口, 其他应用主动指向它就会被代理。因此:
- 不需要 macOS System Extension 权限、不需要签名
- 不破坏 iOS 工程(iOS 侧 PacketTunnelProvider 保持不变)
- Ctrl-C 即可干净退出