Skip to content

Repository files navigation

Hora(奥拉)

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

功能特性

菜单栏集成

  • 在 macOS 菜单栏显示当前日期,格式为 MM月DD日
  • 悬停提示显示完整日期和农历信息
  • 左键点击打开日历弹出窗口
  • 右键点击显示上下文菜单(退出选项)

日历视图

  • 月视图:网格显示当月所有日期
  • 年视图:单页概览全部 12 个月份
  • 导航:上/下月切换按钮和"今天"快速导航
  • 农历显示:每个日期显示对应的农历日期
  • 节假日标识
    • 红色"休"标签表示法定节假日
    • 灰色"班"标签表示周末调休工作日
  • 节日显示
    • 红色文字显示农历节日和公历节日
    • 绿色文字显示二十四节气
  • 日期选择:点击选中日期,蓝色高亮显示
  • 今日标记:当前日期蓝色边框

日历显示 节假日日历显示 黄历显示 软件世界时钟

世界时钟

  • 交互式地图:基于 MapKit 的世界地图,带城市标记
  • 实时更新:每秒更新时间显示
  • 城市时间显示:显示全球多个主要城市时间
  • 当前位置:自动检测并高亮显示当前时区
  • 悬停/点击交互:悬停或点击查看城市详情
  • 全屏模式:可切换全屏显示
  • 时区信息:显示 UTC 偏移量和夏令时状态

黄历功能

  • 每日概要:显示宜(适合做的事项)和忌(避免做的事项)
  • 详细信息:完整的黄历信息,包括:
    • 五行:金木水火土
    • 冲煞:冲、煞方位
    • 彭祖:每日忌口字符
    • 吉神/凶神:吉神和凶神方位
    • 星宿:二十八星宿
  • 时辰吉凶:12 个时辰(每时辰 2 小时)的吉凶指示
  • 宜忌网格:宜/忌事项的可视化网格显示

黄历显示

定时休息(RestNow)

  • 工作/休息循环:可自定义工作和休息时长(工作 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+
  • 依赖库
  • 第三方项目
    • 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

安装

  1. 下载 dist/Hora.dmg,双击挂载

  2. Hora.app 拖入 Applications 文件夹

  3. 首次打开时如提示"已损坏,无法打开"或没有任何反应,请执行以下命令移除隔离属性:

    xattr -dr com.apple.quarantine /Applications/Hora.app

    之后即可正常双击运行。

重要说明:本应用使用 Ad-Hoc 签名,未经 Apple Developer 证书公证,因此 macOS 的 Gatekeeper 会阻止其启动。上述 xattr 命令会移除文件的 com.apple.quarantine 隔离属性,从而绕过该校验。该操作仅作用于本应用本身,不影响系统其他文件。

使用说明

  1. 启动:应用作为菜单栏程序运行(无 Dock 图标)
  2. 查看日历:点击菜单栏中的日期
  3. 切换月份:使用箭头按钮切换,或点击"今天"返回
  4. 查看世界时钟:在侧边栏选择"World Clock"
  5. 查看黄历:在日历中选中日期,底部显示黄历概要
  6. 退出应用:右键点击菜单栏图标,选择"Quit Hora"

开源许可

MIT License

About

日历、世界时钟、番茄时钟、Todo结合的mac原生软件。使用 swift 开发

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages