一个 macOS 菜单栏工具,用快捷键和状态栏菜单快速切换 Shadowrocket VPN,并显示本次 App 启动后的实时网速与累计流量。
适合经常在 macOS 上切换 Shadowrocket VPN、希望少打开系统设置或 Shadowrocket 主界面的用户。最短使用方式:构建后打开 .build/ShadowrocketSwitch.app,菜单栏会出现网络状态图标和实时上下行速度。
- 菜单栏快速查看 Shadowrocket VPN 状态
- 一键切换 VPN 连接状态
- 全局快捷键
Command + Option + S - 实时显示下载 / 上传速度
- 统计本次 App 启动后的累计下载 / 上传流量
- 打包为无 Dock 图标的 macOS 菜单栏 App
- macOS 13 或更高版本
- Xcode / Command Line Tools
- Swift 5.9 或更高版本
- 已安装并配置 Shadowrocket VPN 服务
./scripts/build.sh构建完成后,App 会生成在:
.build/ShadowrocketSwitch.app
ditto .build/ShadowrocketSwitch.app /Applications/ShadowrocketSwitch.app
open /Applications/ShadowrocketSwitch.app如果已有旧进程在运行,可以先退出菜单栏 App,或执行:
pkill -x ShadowrocketSwitch启动后,菜单栏会显示网络状态图标和实时网速,例如:
↓120 KB/s ↑8 KB/s
点击菜单栏图标可以查看:
- 当前 VPN 状态
- 实时网速
- 本次 App 启动后的累计流量
- 切换 VPN
- 刷新状态
- 退出 App
快捷键:
Command + Option + S
流量统计基于 macOS 网络接口计数器:
- 排除 loopback 接口
- 统计 App 启动后每次采样之间的增量
- 累计值只代表本次 App 运行期间的数据
- 当前实现统计系统活跃网络接口总流量,不保证只统计 Shadowrocket VPN 隧道流量
Sources/ShadowrocketSwitch/
├── main.swift # App 启动入口
├── AppDelegate.swift # 菜单栏、菜单、状态刷新
├── VPNController.swift # 通过 scutil 控制 VPN
├── HotKeyController.swift # 全局快捷键
└── NetworkStatsController.swift # 实时网速与累计流量统计
Resources/
└── Info.plist # macOS App bundle 配置
scripts/
├── build.sh # 构建并打包 .app
└── generate_app_icon.swift # 生成 App 图标资源
调试构建:
swift buildRelease 打包:
./scripts/build.shMIT