照见 TimeMirror 上架 Mac App Store:一个用 AI 从零写出的 macOS 工具

10 月 13 日,照见 TimeMirror 正式上架 Mac App Store。这是一款本地优先的 macOS 时间追踪与自我觉察工具,也是我用 AI 从零写出的第一个上架产品——从一句话原型到通过审核,全程 AI 协作开发。

你的时间去了哪里?让数据告诉你答案。

10 月 13 日,照见 TimeMirror 正式上架 Mac App Store。

image.png
App Store 截图

App Store 下载: https://apps.apple.com/hk/app/timemirror/id6774962690?mt=12

这是一款本地优先的 macOS 时间追踪与自我觉察工具:它自动记录你在各应用上的使用时长、专注时段和空闲时间,用数据如实映照每一天。

它也是我用 AI 从零写出的第一个上架产品——从一句话原型到通过审核,全程 AI 协作开发。这篇文章既是产品介绍,也是一次 AI 开发实践的完整复盘。

01 它是什么

照见 TimeMirror 是一款 macOS 时间追踪与自我觉察工具。产品理念只有八个字:

照,如实映照。见,觉知真相。 它不评判、不打扰、不上传——只是安静地把「时间花在哪里」如实记录下来,让你自己判断。
  • 所有数据存储在本机 SQLite 数据库,不上传任何服务器
  • 不记录任何键盘输入内容,不进行屏幕录制或截图
  • 没有账号体系,没有云端存储,没有第三方统计 SDK,没有广告
image.png
图:Today 今日概览——关键指标卡 + 24 小时活动时间线

02 六个核心功能

  1. 今日概览:实时统计当天各应用使用时长,按分类聚合展示。「时间去哪了」一眼看清。
  2. 历史回溯:按天 / 周 / 月查看完整使用记录,支持自定义时间段筛选,并可对比昨日、上周、上月的数据变化趋势。
  3. 习惯养成:把日常应用分组归类(工作、社交、娱乐、学习等),追踪各类习惯的每日投入时长和趋势曲线,帮助你看见长期行为模式。
  4. 专注分析:自动识别番茄钟式专注时段,结合动态分母算法计算真实专注率;区分「深度专注」与「碎片化使用」,让「看起来在忙」和「真正专注」一目了然。
  5. AI 洞察:接入 DeepSeek,在设置中填入自己的 API Key 后,根据你的时间使用数据生成个性化洞察与提醒。发送的只是聚合后的统计特征,不含应用名与窗口标题;Key 只保存在本机钥匙串。
  6. 24 小时时间线:以 24 小时时间轴可视化展示一天的活动轨迹:使用时段、空闲间隔与专注块,一天的时间结构清晰呈现。

image.png
图:Focus 专注分析——活跃时长分布 + 专注热力图

03 为什么做这款产品

每天在电脑前十个小时,晚上回想,脑子里只剩两个字:忙。但说不出忙了什么。写代码是 2 小时还是 5 小时?刷网页是 20 分钟还是 2 小时?人的记忆是出了名的不可靠——感受深刻的,未必是花时间最多的。

macOS 自带的「屏幕使用时间」给了个粗糙答案,但有三个硬伤:数据不能导出、分类不够细、看不到应用切换的精确时间线。我想要的是一个完全自动、无感的系统:后台静默运行,不需要任何手动开始 / 停止,精确到秒,把时间分配的真相还给我自己。

注意力是程序员最稀缺的资源,而管理注意力的第一步,是看清它流向哪里。我需要一面镜子。

04 隐私设计:本地优先

  • 数据本地优先:全部使用数据只写入本机 SQLite,不上传任何服务器
  • 零第三方 SDK:不含统计、遥测或广告组件
  • 核心功能零权限:前台应用切换走 macOS 公开接口,不申请辅助功能权限
  • AI 功能最小暴露:只发送聚合后的统计特征;API Key 只存本机钥匙串;不使用该功能时,应用零网络请求
  • 想删就删:开机自启默认关闭;删除数据目录或卸载应用,数据随之彻底清除,无残留

05 它是怎么写出来的:AI 开发实践复盘

技术栈很简单:Swift 6.2 + SwiftUI + SQLite,零第三方依赖,纯 macOS 原生 API。真正的特别之处在于——整个项目是用 AI 写出来的。

1、从一句话到原型

项目的第一行代码,来自对着 AI 编程助手说的一句话:

「帮我写一个 macOS 菜单栏 App,检测前台应用切换,记录名称和时间,用 SQLite 存储。」

10 分钟后,代码跑起来了。第一次看到真实的数字:Safari 2.3h、CodeBuddy 3.1h、WeChat 1.5h——像一个近视的人第一次戴上眼镜,世界突然清晰了。

2、三层架构:从信号到洞察

  • 传感器层:五条采集通道(前台应用切换、键盘事件、系统资源、空闲检测、系统事件),每秒采样、事件驱动。这些是最原始的物理事实,不经过人的判断
  • 会话层:一个两态状态机(active ↔ inactive),每秒执行 Snapshot → Reduce → Transition,把离散信号拼成有头有尾、精确到秒的会话记录
  • 统计层:Dashboard 上的所有数字都是「算出来的」,不是「存起来的」。存原始数据、算统计结果——今天想按小时看,明天想按分类看,换一个角度问它问题就行

3、渐进式 Schema 生长

6 张数据表不是第一天画 ER 图设计出来的,而是 14 天里被一个个真实需求催出来的:

  • 第 1 天 app_sessions(想知道用了什么应用)
  • 第 3 天 system_snapshots(想看 Mac 什么时候变卡)
  • 第 5 天 alerts(要主动提醒)
  • 第 7 天 idle_periods(区分「在用」和「离开了」)
  • 第 10 天 boot_events(统计重启次数)
  • 第 14 天 keystrokes(想知道一天敲了多少键盘)

不为「将来可能需要」而设计,只为「现在就需要」而演进——每张表加出来,都立即投入使用。

4、AI 协作的真实面貌

「AI 写代码」不是一句话搞定一切,而是一个人类主导的迭代循环:

我提出需求 → AI 生成代码 → 我运行看结果 → 对吗? 对 → 继续下一个需求;不对 → 描述现象给 AI → 修改 → 再试

AI 是那个打字飞快的助手,但决定做什么、判断对不对、选择走哪条路的,始终是人。这个过程里 AI 犯了大量错误,最典型的六个:

  1. 忽略 NULL:SUM 空了直接返回 NULL,Dashboard 白屏
  2. 时区遗漏:SQLite 存 UTC 时间戳,按北京时间直接算,凌晨数据全错位
  3. 忘了去重:统计没用 DISTINCT,数字虚高
  4. 边界条件:整点切分时间线时,边界上的数据被丢弃
  5. 过度优化:小表加了一堆索引,写入速度反而变慢
  6. SQL 注入:应用名 "O'Reilly" 的单引号直接把 SQL 语法炸了
这些错误不是 AI 的缺陷,恰恰相反——它们是最好的老师。每踩一个坑,就被迫去学背后的原理:NULL 为什么有「传染性」?时区转换到底发生了什么?B-Tree 索引为什么会减慢写入?

5、比语法更重要的三件事

  1. 提出正确的问题:把模糊的需求翻译成计算机能精确执行的查询
  2. 读懂 AI 的回答:知道它在干什么,而不是盲目复制粘贴
  3. 验证结果的正确性:COUNT(*) 看总量、LIMIT 10 看抽样、ORDER BY DESC 看极端值、IS NULL 看空值、用常识心算验证——我称之为「验 SQL 五步法」

做完这个项目,我对自己的角色也有了清晰认知:你不是 SQL 程序员,你是产品经理 + QA。 你能做的最重要的事,不是记住所有语法,而是知道什么值得做、怎么把需求拆成 AI 能理解的步骤、怎么验证 AI 产出的质量。

你不是在学数据库,你是在做产品。数据库是你路上的工具,不是目的地。这不是「学了再做成」,而是「为了做成而学」。

06 一个真实的技术细节:分母决定结论

Focus 页面有一张 24 小时活跃比例图。同一个分子(本周某小时共活跃 9000 秒),分母的算法不同,结论天差地别:

  • 固定分母(旧):7 天 × 3600 秒 = 25200 → 活跃比例 35.7%,看起来「大部分时间在摸鱼」——它把根本没开机的天数也算进了分母,严重低估真实活跃度
  • 动态分母(新):只算实际开机的 3 天 × 3600 秒 = 10800 → 83.3%,真实含义是「只要开机就很专注」

修正方案没有引入复杂 SQL,只是在遍历会话时用一个 Set 按小时去重统计「活跃天数」——大约 5 行代码,替代了原来 30 行的 switch-case。

分母的定义决定结论。而好的设计,往往更简单。

07 版本与获取

Mac App Store 版

  • 售价 HK$8,当前版本 0.25,要求 macOS 15.6 及以上
  • 在 App Store 搜索「照见 TimeMirror」即可下载
  • 受沙盒与审核限制:暂不支持 iCloud 多设备同步;键盘击键统计有所裁剪

官网版(功能完整)

  • vizwise.cn 提供下载,要求 macOS 14 及以上
  • 多设备同步:iCloud Drive 增量同步,按条目 UUID 幂等合并,本地库始终权威
  • 键盘击键统计:按应用与输入法统计击键次数并估算 Token 输出量,仅统计次数、不记录任何内容
  • 另有 iLife 生命进度:108 格生命网格、天干地支纪年、翻页时钟,以及一记敲木鱼
Tokens 统计界面——分小时击键次数与输入法占比

图:Tokens 统计界面——分小时击键次数与输入法占比

08 结语

最让我感慨的是:这面镜子本身,就是 AI 帮我打磨出来的。从一个想法到一个完整产品,从「数据库是什么」到能用递归 CTE 拆分 24 小时时间线,整个过程不过几个星期。

AI 让「从想法到产品」的距离变得前所未有的短——但前提是:你确实有一个值得去做的想法。

数据和工具都只是手段,看清自己、改进自己,才是目的。

App Store 下载: https://apps.apple.com/hk/app/timemirror/id6774962690?mt=12

产品页与帮助:vizwise.cn/pages/timemirror | 联系:wyp@vizwise.cn

唯有知识,让我们免于平庸。—— XILEJUN · 2026 年 10 月

No comments yet