macOS 菜单栏 App(NSStatusItem + SwiftUI popover,LSUIElement 无 Dock 图标)。
启动后常驻状态栏,点击展开 popover 看各 provider 的 token 用量(今日 / 7 天 / 30 天 / 累计)。
app/
├── Package.swift
├── Sources/
│ ├── usageBar/ 主 App:main.swift + AppDelegate + StatusBarController + SwiftUI 视图
│ ├── usageBarCore/ 协议层:UsageProvider 协议 + 数据模型 + 增量缓存
│ └── usageBarProviders/ 各 provider 实现
├── Scripts/ 打包脚本(build-app.sh)
└── Tests/usageBarCoreTests/ 单测
需要:macOS 14+、Swift 6.0+(Xcode 15+ 自带)
cd app
swift build # 编译
swift run usageBar # 运行(菜单栏出现图标)
swift test # 跑单测cd app
open Package.swift # Xcode "Open Package..."- 顶部 scheme 选
usageBar - Cmd+R 运行 / Cmd+U 跑测试
build-app.sh 一条龙:编译 release → 打 .app bundle → 生成两个分发产物。
cd app
./Scripts/build-app.sh产物:
| 产物 | 路径 | 用途 |
|---|---|---|
usageBar.app |
app/dist/usageBar.app |
本机测试:open app/dist/usageBar.app |
usageBar.zip |
app/dist/usageBar.zip |
Sparkle 更新包 + 官网镜像 / skill 用 |
usageBar.dmg |
app/dist/usageBar.dmg |
给人类:拖拽安装的 DMG(推荐) |
「给 AI 装」改走远程 skill.md(usagebar.cn/skill.md)+ 火山镜像 (
usagebar.cn/dl/usageBar.zip,服务器 cron 每天自动从 GitHub 同步),不再随仓库分发 install-usagebar.zip。
发布把 usageBar.dmg + usageBar.zip 传到 GitHub Releases。
- 在
Sources/usageBarProviders/新建XxxProvider.swift - 实现
UsageProvider协议(WukongProvider.swift是最简单的 flat jsonl 模板) - 实现
fetchDailyRecords() - 在
ProvidersBootstrap.swift的registerAll()里加一行 swift run usageBar验证
swift package clean
rm -rf .build .swiftpm Packages app/dist