手搓苹果电脑日历APP(20260507更新)

一直没有找到自己喜欢的苹果电脑可用的日历软件,索性用workbuddy手搓了一个XCalendar,欢迎使用。

# XCalendar

macOS 状态栏日历应用,小巧实用,让日期一目了然。

XCalendar — 从初始到现在的功能总览

v1.x — 基础版本

macOS 13+ 状态栏日历应用,Swift + AppKit 纯代码构建。

  • 状态栏显示日历图标、公历日期、农历、星期、时间(30 秒刷新)
  • 响应式缩放(13寸 0.82 ~ 15寸 1.0),深色/浅色主题跟随系统
  • 日历面板:月份导航、6行7列网格、阳历+阴历双显示
  • 农历计算引擎:干支、生肖、24节气、阴历↔阳历互转
  • 4 种日期格式、周日/周一可切换
  • 系统日历事件读取/添加/删除
  • 中国节假日显示、调休/补班"休"/"班"标记
  • 纪念日设定(阳历/阴历)、面板底部倒计时
  • 24/12 小时制切换

v2.0.0 — 全面重构

完整重写 CalendarView.swift,修复 10+ 个编译和运行时问题。

  • CalendarView 全面重建,消除死代码和编译警告
  • 修复月份导航、键盘监听器泄漏、事件缓存等 Bug
  • 完善阴历纪念日到阳历的日期转换
  • 年份视图(3x4 月份网格)交互优化

v2.1.0 — 本次更新(2026-05-07)

新增功能

事件编辑 右键菜单新增"编辑事件",可弹窗修改已保存的系统日历事件标题,调用 EKEvent.save 写入系统日历。

纪念日通知 App 启动时请求通知权限,启动后每小时检查一次。当今天匹配阳历或阴历纪念日时,自动弹出 macOS 系统通知横幅,同一天不会重复通知。

年份视图 底部工具栏新增"年份"按钮,点击显示 3×4 月份网格覆盖层,点击月份跳转。右上角 ✕ 按钮、背景点击、ESC 均可关闭。年份视图打开时自动禁用双指滑动和方向键导航,防止误操作。

周数列 通用设置新增"周数"开关,开启后日历网格左侧显示 ISO 周数,切换即时生效。

状态栏徽章 当天有系统日历事件时,日历图标右上角叠加红色圆徽章显示事件数量,可在通用设置中开关。

自定义提示语 状态栏设置中可自定义鼠标悬停提示语内容,留空恢复默认显示。

节假日 API 重试 网络请求失败后自动 60 秒重试,最多 3 次,避免因临时网络问题导致节假日数据缺失。

Bug 修复

节假日数据错误 isHolidayRest 和 isAdjustedWorkday 的 2026 年硬编码数据有多处错误。对照 timor.tech 官方 API 逐条核实并修正了 7 个日期,包括 4月26日错误标记为上班、2月15日(春节)错误标记为补班、9月27日(中秋节)错误标记为补班等。

双指滑动切换月份丢失 2.0.0 重构后双指水平滑动功能缺失,通过 scrollWheel 监听手势阶段和累计偏移量恢复。

键盘导航丢失 方向键切换日期、ESC 关闭面板、T 跳转今天全部丢失。因 nonactivatingPanel 下 keyDown 不触发,改用 NSEvent.addLocalMonitorForEvents 实现。

开机启动不生效 偏好设置的"开机后自动启动"勾选后只存了 UserDefaults,未调用系统 API。改为 macOS 13+ 原生 SMAppService.mainApp.register()/unregister(),启动时自动校验注册状态。

状态栏设置 Tab 控件不可点击 新增工具提示语输入框后,后续勾选框被推出视图外。调整布局间距后修复。

周数开关不即时刷新 切换后只更新了数据未触发重绘,在 gridView.reload() 末尾加 setNeedsDisplay(bounds) 修复。

功能完善

  • YearView 背景任意点击即可关闭
  • 面板每次打开时自动清除系统日历事件缓存,确保数据显示最新
  • allHolidayDates() 修复跨年数据混用和同天误判两个逻辑 Bug
  • 所有 nearestHoliday() 中的日期比较改为 startOfDay,修复同天节假日被错误跳到明年的问题

下载XCalendar2.1

2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注