Skip to content

Popcornnnnnnnn/timer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Timer

一个轻量的 macOS 菜单栏计时器,用来记录任务、标签、挂起任务和本地时间统计。数据保存在本机 JSON 文件中,不依赖账号、云服务或后端。

macOS Swift SwiftUI License

功能亮点

  • 菜单栏常驻:点击菜单栏图标即可开始、暂停、恢复或结束计时。
  • 任务标签:内置学习、工作、运动标签,也支持创建自定义标签。
  • 任务挂起:最多挂起 5 个任务,适合临时切换上下文后再回来继续。
  • 历史记录:支持查看、编辑、删除和手动补录任务记录。
  • 统计视图:提供今日统计和最近 7 天的标签维度时间分布。
  • 本地存储:任务、标签和运行状态保存到 ~/Library/Application Support/Timer/

界面概览

Timer 是一个窗口样式的 macOS MenuBarExtra 应用,核心界面围绕三件事展开:

  • 当前任务:任务名、标签、已计时长和暂停/结束操作。
  • 挂起任务:展示已暂停的上下文,并可一键恢复或结束。
  • 历史与统计:补录任务、修正记录,并查看日/周时间分布。

运行要求

  • macOS 15.6 或更高版本
  • Xcode 16+ / 17+(用于本地开发和构建)
  • Apple Developer Team 或本机自动签名配置(Xcode 运行时需要)

当前工程设置:

  • Bundle ID: Play.Timer
  • Deployment Target: macOS 15.6
  • Version: 1.0
  • Architecture: macOS app, SwiftUI, MVVM

快速开始

git clone https://github.com/Popcornnnnnnnn/Timer.git
cd Timer
open Timer.xcodeproj

在 Xcode 中选择 Timer scheme 和 My Mac 目标,然后运行 Cmd + R

也可以用命令行确认项目能构建:

xcodebuild -project Timer.xcodeproj -scheme Timer -destination 'platform=macOS' build

实现方式

Timer 的核心数据模型是 TaskRecordTimeSegmentTag

  • TaskRecord 表示一条任务记录,包含任务名、标签、开始/结束时间和多个计时片段。
  • TimeSegment 让同一任务可以被暂停、挂起、恢复,并保留真实累计时长。
  • Tag 记录标签名称和颜色,并以 hex 字符串序列化。

主要管理对象:

  • TimerManager: 当前任务、挂起任务、计时状态和任务切换。
  • DataManager: JSON 持久化、标签管理、历史任务读写。
  • StatisticsManager: 今日统计、周统计和标签聚合。

项目结构

Timer/
├── Timer/
│   ├── Components/      # 可复用 SwiftUI 组件
│   ├── Models/          # TaskRecord、TimeSegment、Tag
│   ├── Utilities/       # 常量和时间格式化
│   ├── ViewModels/      # 计时、数据、统计管理
│   └── Views/           # 菜单栏窗口、历史记录、统计视图
├── TimerTests/          # Swift Testing 单元测试入口
├── TimerUITests/        # XCTest UI 测试入口
├── Docs/                # 架构、使用说明、修复记录
└── Timer.xcodeproj

更详细的说明见:

本地数据

应用数据保存在:

~/Library/Application Support/Timer/
├── tasks.json       # 已完成任务记录
├── tags.json        # 标签列表
└── appState.json    # 当前任务和挂起任务状态

备份时复制整个 Timer 目录即可。清空该目录会重置本地数据。

路线图

  • 标签颜色编辑
  • 更强的历史筛选和搜索
  • 月视图统计
  • CSV 数据导出
  • 全局快捷键
  • 番茄钟模式
  • iCloud 同步

开发备注

本仓库目前更适合用 Xcode 直接打开开发。命令行构建已验证:

xcodebuild -project Timer.xcodeproj -scheme Timer -destination 'platform=macOS' build

测试 target 目前仍是初始模板,后续可以优先补充这些单元测试:

  • TimeFormatter 的边界格式化测试
  • TaskRecord.totalDuration() 的多片段累计测试
  • DataManager 的本地 JSON 编解码测试

许可证

MIT License. See LICENSE.

About

Lightweight macOS menu bar timer for tracking tasks with tags, paused sessions, history, and local JSON statistics.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages