Skip to content

Latest commit

 

History

73 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

骑行记录看板

Vibe Coding 作品 — 从浏览器原型演进为原生 macOS 应用。

将 Garmin / WorkOutDoors 等 App 导出的 .fit 骑行文件拖入 macOS 应用任意位置,自动解析并展示地图路线、骑行数据和分析统计;右上角「+」菜单也可选择导入文件或记录保养。

本项目的 Web 版本 已归档在 web/ 目录,功能完整但不再迭代。

功能一览

功能 说明
地图首屏 进入即见所有路线总览,MapKit 全屏展示
统计卡片 距离/用时/均速/极速/爬升/消耗/心率一目了然
月度图表 柱线双轴图,月度里程趋势 + 均速
智能路线命名 自动识别起点终点,三种命名模式 + 地标辅助
绕圈检测 起点终点相同时自动进入绕圈模式,途经点标记 + 圈数统计
路线对比 选中同路线所有骑行,统一缩放聚焦
排序筛选 骑行列表按日期/距离/均速/爬升排序,统计区按月筛选
深色模式 明暗切换,系统跟随可选
保养提醒 日常自维护、小保养、大保养三类提醒,按里程/日期/骑行小时自动计算剩余周期
保养记录 右上角「+」可记录保养,支持补录历史时间并显示上次保养记录
保养设置 可配置干性油/湿性油/蜡性润滑周期、项目启用状态、侧边栏显示和主题
分享图导出 1:1 / 3:4 比例,5 预设渐变 + 纯色 + 自定义背景
Obsidian 同步 Cmd+Shift+S 一键同步到知识库

保养提醒

主界面侧边栏底部会显示已启用且选择展示的保养项目。每一行包含上次保养时间、剩余周期百分比和剩余里程/日期/骑行小时;任一条件达到周期后会标记为到期。

  • 右上角「+」菜单可以选择「记录保养」或「导入 FIT 文件」。记录保养时可以选择项目和实际完成时间,也支持补录过去的保养记录。
  • 默认内置三类项目:日常自维护、小保养(车店清洁、检查和基础调校)、大保养(长期全面维护)。
  • 设置中可以选择干性油、湿性油或蜡性润滑,并分别调整链条润滑提醒间隔;也可以单独控制每个项目是否启用、是否显示在侧边栏。
  • 第一次使用且尚未记录真实保养时,周期从第一条骑行记录的时间开始计算。
  • 保养数据保存在项目文件夹的 data/maintenance.json,不会修改已有的 rides.json。

快速开始

# 系统要求: macOS 14 (Sonoma) 或更高

cd CyclingDashboard

# 日常验收(增量编译)
./build-app.sh debug

# 发布
./build-app.sh

# 从 Finder 打开 .build/release/CyclingDashboard.app
# 首次运行通过「项目 > 选择项目文件夹」指向仓库根目录

也可用 Xcode 直接打开 Package.swift,Cmd+R 增量编译 + SwiftUI Preview。

开发与测试

日常修改后运行一次完整验收:

cd CyclingDashboard
./verify-app.sh

这个命令会先运行自动测试,再生成调试版 .build/debug/CyclingDashboard.app。

在 Xcode 中:

  • Cmd+U:运行全部自动测试
  • Cmd+R:编译并启动应用,进行界面验收

自动测试覆盖核心算法、旧版 JSON 兼容、三类保养规则迁移、保养周期计算、圈数优先级、骑行排序及路线趋势数据。地图交互、FIT 导入、保养记录、重命名、删除和分享仍需在发布前人工走查。

打包 DMG

cd CyclingDashboard
./package-dmg.sh

脚本会构建自带图标的 Release App,并覆盖生成最新的 .build/CyclingDashboard-macOS.dmg。

当前工程是 Swift Package,Xcode 的 Archive 会将它视为可执行程序归档到 Products/usr/local/bin,不会自动生成标准 macOS App 或 DMG。日常开发仍可使用 Xcode;发布时使用上述脚本。

项目结构

cycling-dashboard/
├── CyclingDashboard/        #   macOS 应用主工程
│   ├── Package.swift
│   ├── Tests/                 # XCTest 自动测试
│   ├── verify-app.sh          # 自动测试 + 调试构建
│   ├── Sources/
│   │   └── CyclingDashboard/
│   │       ├── App.swift            # 入口 + 菜单栏 + 快捷键
│   │       ├── DashboardView.swift  # 主布局
│   │       ├── MapView.swift        # MapKit 地图
│   │       ├── ImportView.swift     # .fit 导入
│   │       ├── StatsSection.swift   # 统计卡片
│   │       ├── MonthlyChartView.swift # 月度图表
│   │       ├── RideDetailView.swift # 骑行详情
│   │       ├── DataStore.swift      # 数据层
│   │       ├── Models.swift         # 数据模型
│   │       ├── CoordinateTransform.swift # WGS-84 ←→ GCJ-02
│   │       ├── Theme.swift          # 主题/配色
│   │       ├── MaintenanceModels.swift # 保养规则、周期和数据模型
│   │       ├── MaintenanceSection.swift # 侧边栏保养提醒
│   │       ├── MaintenanceRecordView.swift # 记录保养
│   │       ├── SettingsView.swift    # 通用、保养和数据设置
│   │       ├── Utils.swift          # 工具函数
│   │       └── ...
│   └── build-app.sh
├── web/                      #   已归档浏览器版(不再迭代)
├── data/
│   ├── rides.json            # 所有骑行数据
│   ├── locations.json        # 地标列表
│   └── maintenance.json      # 保养记录与提醒设置(本地生成)
├── scripts/                  # 工具脚本
└── config.example.json       # 配置模板

技术栈

层 技术
语言 Swift 6
UI SwiftUI
地图 MapKit
图表 Swift Charts
数据 SwiftData / JSON
.fit 解析 Python fitparse(桥接)
地理编码 OpenStreetMap Nominatim API

.fit 文件兼容性

App 状态
WorkOutDoors (iOS) 完整支持
Garmin Connect 标准 FIT 协议
Wahoo Fitness 同上
Strava 导出 同上

致谢

本项目始于 2026 年 5 月的一个浏览器原型,经多轮迭代演进为原生 macOS 应用。全程由 AI 对话驱动(Vibe Coding),零手工编码。Web 原型源码保留在 web/ 目录供参考。

许可

MIT

About

🚴 Vibe Coding 作品 | 原生 SwiftUI macOS 骑行记录看板,从浏览器原型演进

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages