一款 macOS 菜单栏应用,集时间、日历、世界时钟于一体。

- 在 macOS 菜单栏显示当前日期,格式为
MM月DD日 - 悬停提示显示完整日期和农历信息
- 左键点击打开日历弹出窗口
- 右键点击显示上下文菜单(退出选项)
- 月视图:网格显示当月所有日期
- 年视图:单页概览全部 12 个月份
- 导航:上/下月切换按钮和"今天"快速导航
- 农历显示:每个日期显示对应的农历日期
- 节假日标识:
- 红色"休"标签表示法定节假日
- 灰色"班"标签表示周末调休工作日
- 节日显示:
- 红色文字显示农历节日和公历节日
- 绿色文字显示二十四节气
- 日期选择:点击选中日期,蓝色高亮显示
- 今日标记:当前日期蓝色边框
- 交互式地图:基于 MapKit 的世界地图,带城市标记
- 实时更新:每秒更新时间显示
- 城市时间显示:显示全球多个主要城市时间
- 当前位置:自动检测并高亮显示当前时区
- 悬停/点击交互:悬停或点击查看城市详情
- 全屏模式:可切换全屏显示
- 时区信息:显示 UTC 偏移量和夏令时状态
- 每日概要:显示宜(适合做的事项)和忌(避免做的事项)
- 详细信息:完整的黄历信息,包括:
- 五行:金木水火土
- 冲煞:冲、煞方位
- 彭祖:每日忌口字符
- 吉神/凶神:吉神和凶神方位
- 星宿:二十八星宿
- 时辰吉凶:12 个时辰(每时辰 2 小时)的吉凶指示
- 宜忌网格:宜/忌事项的可视化网格显示
- 工作/休息循环:可自定义工作和休息时长(工作 20/30/45/60 分钟,休息 5/10/20 分钟)
- 全屏休息提醒:休息时间到时,在所有显示器上显示全屏遮罩
- 菜单栏倒计时:菜单栏实时显示当前阶段倒计时
- 灵活控制:支持暂停、重置、跳过休息、提前开始休息
- 锁屏感知:自动检测锁屏/解锁状态,锁屏期间暂停计时
- 唤醒恢复:系统从睡眠恢复后自动重置或继续计时
- 首次引导:首次启动提供引导设置向导
菜单栏折叠(Hidden Bar)
- 图标收纳:隐藏/显示菜单栏左侧多余的图标,保持菜单栏整洁
- 折叠/展开:点击 chevron 按钮切换,或右键菜单操作
- 自动折叠:展开后可设定 5/10/15/30/60 秒自动折叠
- 始终隐藏区域:可选第二个分隔符,将图标分入“始终隐藏”区
- 隐藏分隔线:隐藏 separator 视觉标记,实现无感收纳
- 设置向导:右键菜单「隐藏栏 → 设置向导…」可随时重新打开引导;首次启动引导也会引导配置
- 开机启动:右键菜单可设置开机自动启动
macOS 26 已知限制:Tahoe 的菜单栏布局由系统 ControlCenter 集中管控,应用无法程序化指定状态项位置。 如需移动白色分隔符/箭头,请按住 ⌘ 拖动到目标位置(建议紧挨右侧日期旁),Hora 会记住该位置; 总开关关闭再开启、以及重启应用后均会保持。若启动后两项不可见(被挤入刘海区),请先减少菜单栏图标或切换显示器后拖出。
- 支持多种语言:简体中文、English、日语、韩语
- 所有 UI 字符串均已本地化
- 框架:SwiftUI + AppKit(混合开发)
- 语言:Swift 5.9+
- 最低 macOS 版本:macOS 14.0+
- 依赖库:
- SwiftDate:日期时间工具
- lunar-swift:农历计算库
- 第三方项目:
- Rest-Now:定时休息功能基于此项目改编
- Hidden Bar:菜单栏图标折叠/展开功能基于此项目改编
Sources/Hora/
├── App/
│ ├── AppDelegate.swift # 菜单栏管理
│ └── HoraApp.swift # 应用入口
├── Core/
│ ├── Models/
│ │ └── WorldCity.swift # 城市数据模型
│ ├── Services/
│ │ ├── CityDataService.swift # 城市/时区管理
│ │ ├── HolidayService.swift # 节假日数据 (2001-2026)
│ │ └── LunarCalendarService.swift # 农历计算服务
│ └── Utils/
├── Features/
│ ├── Almanac/
│ │ ├── AlmanacDetailPopup.swift # 弹出窗口组件
│ │ └── AlmanacDetailView.swift # 完整详情视图
│ ├── Calendar/
│ │ ├── CalendarContainerView.swift # 主日历容器
│ │ ├── CalendarGridView.swift # 日历网格
│ │ └── CalendarPopoverView.swift # 弹出窗口版本
│ ├── RestNow/
│ │ ├── BreakOverlayView.swift # 休息全屏遮罩视图
│ │ ├── BreakOverlayWindowManager.swift # 多屏幕遮罩窗口管理
│ │ ├── OnboardingView.swift # 首次引导设置
│ │ ├── RestNowColorSettings.swift # 圆圈颜色配置
│ │ └── RestNowSession.swift # 定时休息核心逻辑
│ └── WorldClock/
│ ├── WorldClockMapView.swift # 地图组件
│ └── WorldClockPopupView.swift # 带控制栏的弹出窗口
└── Resources/
├── Cities.json # 世界城市数据
└── Localizable.xcstrings # 本地化字符串
| 命令 | 说明 |
|---|---|
swift run app |
运行应用 |
swift run Hora |
运行应用(完整名称) |
swift run dmg |
构建 release 版本并创建 DMG |
-
下载
dist/Hora.dmg,双击挂载 -
将
Hora.app拖入Applications文件夹 -
首次打开时如提示"已损坏,无法打开"或没有任何反应,请执行以下命令移除隔离属性:
xattr -dr com.apple.quarantine /Applications/Hora.app
之后即可正常双击运行。
重要说明:本应用使用 Ad-Hoc 签名,未经 Apple Developer 证书公证,因此 macOS 的 Gatekeeper 会阻止其启动。上述
xattr命令会移除文件的com.apple.quarantine隔离属性,从而绕过该校验。该操作仅作用于本应用本身,不影响系统其他文件。
- 启动:应用作为菜单栏程序运行(无 Dock 图标)
- 查看日历:点击菜单栏中的日期
- 切换月份:使用箭头按钮切换,或点击"今天"返回
- 查看世界时钟:在侧边栏选择"World Clock"
- 查看黄历:在日历中选中日期,底部显示黄历概要
- 退出应用:右键点击菜单栏图标,选择"Quit Hora"
MIT License



