我做了一个更懂中文日期的 macOS 菜单栏日历:白纸日历

11 小时 40 分钟前
 zhoudian

V2EX 的朋友们好,我是「白纸日历」的开发者。

它目前免费、无广告,也有用户反馈它的界面和功能比 macOS 自带日历更好用。

我把它定位成一款为中国用户定制的中文日历,把农历、节气、节假日、调休和日程放进 Mac 菜单栏。

我做这个应用的原因很简单:在 Mac 上,我每天都会确认几次日期、星期、农历、调休和当天安排。可是这些信息分散在菜单栏、系统日历、提醒事项和节假日网页里。为了回答一个很小的问题,往往要连续打开几个地方。

于是我做了「白纸日历」:让它安静地待在菜单栏,需要时点一下,今天是什么日子、这个月怎么放假、接下来有什么安排,尽量在一个面板里看完。

利益相关:我是白纸日历的开发者。应用目前在中国区 Mac App Store 免费提供,不需要注册账号,也没有订阅和内购。

本文部分配图采用 1.5.0 版宣传素材;下载版本和实际可用功能请以 App Store 页面显示为准。

我想解决的不是“再做一个复杂日历”

白纸日历不打算替代 Fantastical 、BusyCal ,也不适合团队排期、会议室预订或跨平台协作。它更像一个轻量的日期入口,专门处理这些高频动作:

如果你已经在使用 macOS 的日历和提醒事项,它不会要求你重新维护一套数据,而是把现有工作流放到一个更顺手的入口里。

一个月历里同时看公历、农历和调休

点开菜单栏后,白纸日历会展开一个 42 格月历。每个日期可以显示公历、农历小字、传统节日、二十四节气,以及日历事件和提醒的提示点。

中国法定节假日和调休上班日会以「休」「班」标记。节假日数据从 Apple 的中国节假日 iCal 公共订阅源获取,并在本机缓存;网络暂时不可用时,已有缓存仍可继续使用。

农历信息还可以展开查看黄历摘要,包括宜忌、干支、冲煞等传统日期信息。我把它做成可展开的卡片,而不是一个必须进入的独立页面:想看时展开,不想看时就保持清爽。

假期不只显示“哪天放”,还给出请假参考

节假日信息对我来说不只是查日期,也会直接影响版本排期、出行和家庭安排。所以假期卡片除了列出放假和调休,还会显示假期倒计时和请假攻略。

请假攻略会结合假期、周末和调休安排,列出请 0 ~ 5 天年假的可行组合,并标注相对划算的方案。它只是日期计算和规划参考,不替代公司制度或官方通知,但在准备小长假时可以少做几次表格推算。

把系统日历和提醒事项放在同一天看

macOS 的「日历」和「提醒事项」本来就是两个 App ,但它们经常回答同一个问题:今天我要做什么?

白纸日历通过 EventKit 读取系统日历事件,通过提醒事项接口读取待办,把同一天的安排合并到日期详情里:

在设置里还可以按日历名称和颜色选择显示范围。工作、个人、节假日或自动化日历可以分别控制,筛选结果会同步到月历、详情卡和小组件。

新建日程支持输入「明天下午三点开会」这类自然语言,应用会在本机解析日期和时间,再由你确认后写入系统日历。解析失败时不会偷偷创建,仍然由你决定最终内容。

菜单栏和桌面小组件,都可以按自己的习惯来

菜单栏空间很宝贵,所以我没有强制一种显示方式。你可以选择仅图标、仅日期、标准、完整或自定义格式,也可以组合年份、星期、时间、秒、农历和节气。

应用还提供四类 macOS 桌面小组件:日期、月历、临近日程和提醒事项,覆盖小、中、大尺寸。小组件会同步主题和已选择的日历范围,点击日期或事项可以回到对应面板。

如果你不喜欢小组件常驻桌面,也可以只使用菜单栏入口;两者互不影响。

我在代码里做的几个取舍

这是一个原生 macOS 应用,主界面使用 SwiftUI ,菜单栏状态项和面板窗口使用 AppKit 。项目最低支持 macOS 13 ,依赖通过 CocoaPods 管理,农历计算使用 Tyme4Swift 。

几个实现原则也直接影响了使用体验:

  1. 系统数据不搬家。 日历和提醒事项通过 EventKit 读取和写回,应用只保存显示偏好和小组件快照。
  2. 小组件有明确边界。 主应用把经过筛选的日期、事件和提醒快照写入 App Group ,WidgetKit 只渲染快照;没有权限或快照过期时,小组件会明确显示状态,不展示猜测的数据。
  3. 菜单栏刷新不制造空白状态。 秒级显示时只替换有效文本,避免状态项先清空再恢复造成宽度抖动;从文本切换到图标时也先安装有效内容。
  4. 设置尽量可回退。 可以开启“精简主面板”、选择日历范围、切换六套主题、跟随系统深浅色,也可以恢复默认菜单栏显示。
  5. 权限按功能申请。 只有使用日历、提醒事项、通知或小组件对应能力时,才会出现相应的 macOS 授权提示。

这些细节不会出现在宣传截图里,但它们决定了一个菜单栏工具能不能每天留下来。

隐私和联网,先把边界说清楚

日历和提醒事项是否授权完全由 macOS 控制。不授权时,主面板和小组件会保留可用的日期信息,相关日程模块则显示权限状态,不会绕过系统设置读取数据。

完整说明可以查看隐私政策

它适合谁,也不适合谁

比较适合:

不太适合:

下载和反馈

当前公开商店页面显示的版本和系统要求,请以 App Store 页面为准:

在 Mac App Store 下载白纸日历

设备要求:macOS 13.0 或更高版本。也可以在 Mac App Store 搜索“白纸日历”。

官网:baizhi.me/calendar

如果你试用后发现菜单栏显示、调休数据、日程筛选、小组件刷新或某个 macOS 版本上的问题,欢迎在评论里直接指出,也可以发邮件到 service@baizhi.me。我更希望收到可复现的步骤、macOS 版本和截图,而不是一句“有点不对”,这样才能真正修好它。

最后,感谢每一位愿意试用、提需求和报告问题的人。白纸日历的方向一直很具体:让 Mac 上那些每天都要确认的日期信息,更清楚、更轻一点。

497 次点击
所在节点    macOS
3 条回复
wwmmkk
10 小时 6 分钟前
这个文案也太 AI 了……
zhoudian
6 小时 2 分钟前
@wwmmkk 是有用😂😂
gangsta
4 小时 39 分钟前
老哥,打扰一下,插一个无关话题 😅
请问你的系统设置里是不是开启了「减少透明度」(辅助功能 → 显示)这个选项啊?
我应该用的和你一样的壁纸,但是我的系统菜单栏无法做到类似你截图里(比如第 6 张)这种白底黑字或者黑图标的效果。
系统里「显示菜单栏背景」「减少透明度」这两个关于沉浸式菜单的相关选项,我目前无论怎么组合设置,我的菜单栏感觉都会透一点儿壁纸的颜色过来,而且图标和文字始终都是白色的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1238172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX