SipBar:给自己写了个喝水提醒器

1339 字
7 分钟
SipBar:给自己写了个喝水提醒器

起因#

我本人有一点点 ADHD,以前脑子里总有很多想法。搁在以前,这些想法大多只能想想;但现在软件工程已经是随抛随用的东西了,想到什么就能随手起个项目试试。正好我平时又懒得喝水,就想着干脆自己写个定期提醒的小工具,练手,也真的能用。

听上去这是个一分钟就能解决的需求,认真找起来才发现不对。系统自带的提醒事项最小重复粒度是「天」,做不了每 30 分钟响一次;口碑最好的 Stretchly 是 Electron 应用,常驻一两百 MB 内存,还因为签名问题被 Homebrew 下架了;Windows 那边更惨,轻量的开源选择几乎没有,最接近的一个项目首次启动要联网拉配置,去年三月就停更了。

而且我要的不只是喝水。起身、护眼、吃药,各自不同的间隔,放在一个列表里管理,「分钟级的多任务定时提醒」加「一个像样的管理界面」加「脚本级的后台开销」,这个组合没有现成的,就自己写了一个——常驻系统托盘,到点弹系统通知,划掉即结束,macOS 和 Windows 双平台,也就是现在的 SipBar。

选型#

技术方案最后定的是 Rust + Tauri:调度、存储这些后端逻辑用 Rust 写,管理界面用原生 TypeScript 写,跑在系统自带的 WebView 里,不开窗口的时候连 WebView 进程都不用起。好处很明显:一套代码同时照顾 macOS 和 Windows,后台开销也非常小。

写完回头看,整个方案里最关键的是一条纪律:调度、存储、统计这些核心逻辑全放在平台无关的模块里,CI 里有个脚本专门盯着,这个模块不许 import 任何平台代码。它的好处是后来才显现的:这一个月撞上的坑几乎全是平台层的,核心逻辑 60 多个集成测试从头到尾全绿,一行没改过。

通知层没有用 Tauri 官方插件,是自己封装的。因为查到插件的依赖链尽头是 Apple 已经废弃的通知接口,在新系统上有静默失效的实锤案例,而且带按钮的通知它做不了。

托盘常驻内存实测 14 到 17MB,macOS 安装包 3.9MB。

Electron 对比:用 Tauri 的好处是显著的,省内存,用户也不用下载那么大的安装包,而且 Electron 这种实现方式我个人不是很喜欢。当然 Electron 也有它的优势:它把整个 Chromium 打包进应用,不管什么设备、什么平台,表现基本一致。Tauri 依赖各系统自带的 WebView,每台机器、每个系统的内核版本都可能不一样,容易碰到一些奇怪的、不太好测试的情况。这就需要权衡了,不过对我个人做项目来说,还是小一点最好。

踩坑#

项目文档里也记录了很多踩坑,这里简单讲几个。

macOS 上通知授权弹窗可以失败得毫无声息。构建产物的签名标识符和 Info.plist 里声明的对不上,授权请求直接就失败了,不报错也不弹窗,通知就是收不到。排查了很久才想到去对比签名,最后在构建脚本里加了一步显式重签。顺带知道了个反直觉的行为:授权弹窗错过一次就再也不会出现了,只能去系统设置里手动开。

深色菜单栏上托盘图标会直接隐身。任务暂停时换了个图标,结果把「随系统配色染色」的设置冲掉了,黑色水滴在深色菜单栏上完全看不见。这种问题不读库的源码根本想不到,最后是每次换图之后手动把 template 设置重申一遍。

前端有个渲染竞态,同一个根因炸了两次。管理窗口起初是整列表重建 DOM,Windows 实机上表现为按钮「点击抽搐」,重建恰好落在点击的窗口里,把点击吞了,重写成按行对账之后才好。一个月之后设置页又出了个灵异空白,查下来根因和它是同族的。两次都是同一个道理:清空也算写操作,所有写入要走同一条路,不然缓存和真值就对不上。

系统睡眠唤醒也没法伪造测试,最后是拿电源日志和提醒流水对着看的:合盖一个多小时,错过的提醒各补了一条,没有连环轰炸。

减法#

这个项目里最纠结的不是技术,是砍功能。最早的通知带「已喝」按钮,整条链路做完我把它砍了:想要的就是「被提醒但懒得逐条确认」,喝没喝自己心里有数。补发规则也直接写死:错过的没超过间隔就补一条,超过了就当你离开时已经喝过,最多补一条——谁也不想合盖一晚上,开机收到二十条「该喝水了」。

最后#

v1.0.0 已经定稿,源码和安装包都在 GitHub(Luan-Fuzi/sipbar),欢迎使用。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

SipBar:给自己写了个喝水提醒器
https://luanfuzi.top/posts/sipbar/
作者
Luan_Fuzi
发布于
2026-10-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Luan_Fuzi
Per Aspera Ad Astra.
公告
欢迎来到我的博客!还没装修好,慢慢来。
分类
标签
站点统计
文章
9
分类
4
标签
14
总字数
6,094
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Workers
博客版本
v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录