和 AI 结对写一个 Mac 阅读器:三个决策比代码更重要

和 AI 结对写一个 Mac 阅读器:三个决策比代码更重要

一、起点:找不到想要的,就自己做一个

作者的需求很具体:一个像 macOS"预览"一样轻快、双击即开、有原生质感的 EPUB 阅读器。找了一圈没找到,于是决定和 AI 结对开发,最终做成了 Silverlinger(余阅),免费提供给 Mac 用户。

这个过程里最值得看的不是代码,而是三个产品决策——它们决定了这个软件"像不像 Mac 应用"。

二、决策一:文档优先,别再造一个书架

大多数阅读软件打开的第一件事是"导入书库",然后给你一个充满封面和分类标签的复杂界面。作者的判断相反:访达(Finder)本身就是 Mac 上最好的文件组织工具——文件夹分类、颜色标签、聚焦检索,全都现成。阅读器何必再造一个封闭的轮子?

落到实现上是三条硬规则:

规则具体做法
书留在原处双击任意 EPUB 直接开读,支持拖拽、⌘O、打开最近使用
只读访问不强制导入,不在私有书架里克隆一份占双倍磁盘
缓存守规矩解压缓存放系统标准 Caches 目录,随时可清空,原文件不动

还有一个容易被忽略的细节:读到一半的书,如果整理时挪了文件夹或改了文件名,再次打开时仍能精准识别,并恢复阅读进度、书签和高亮笔记。这背后是"识别书本身"而不是"识别路径"的设计选择——用户永远会整理文件,软件必须接受这个事实。

三、决策二:换字体不能把整本书熨平

很多阅读工具处理字体非常粗暴:你选一个新字体,它就用全局选择器把全书所有文字统统替换。但一本认真制作的 EPUB,正文、引言、诗词、题记往往有精心编排的字体反差。

读《红楼梦》,正文是宋体,中间插入的《西江月》或判词通常是楷体;技术书里正文字体换了,代码块和引用段落仍应保持特定视觉特征。一刀切的结果,是整本书被"熨平"成索然无味的纯文本。

解法是给"换字体"加一个开关:勾选"保留原书字体风格"后,更换正文字体只作用于普通段落,书中特设的引文、诗词和特定样式完整保留。

另一个坑是中文字体名兼容:不少中文 EPUB 在 Windows 环境下排版,样式表里硬编码了 SimSun、SimKai、Microsoft YaHei。直接套用会回退成默认无衬线字体。做法是内置别名映射,把常见的 Windows 字体声明自动关联到 Mac 本机对应字体。

做阅读器,一半功夫在"不让用户的阅读体验被技术细节破坏"。

四、决策三:把交互做得像不存在

阅读最怕被打断。三个小设计都是围绕"减少操作步骤":

  • 查词典。选中文本右键"查询",调用 macOS 原生词典,查完即隐,不跳窗口。
  • 注释跳转。点击注释跳到文末,一步返回原处,不用记页码。
  • 心得卡片。读到有感触的地方随手记,卡片与原位置绑定,日后可回看。

这些功能没有一个是"创新",但每一个都在减少摩擦。原生应用的价值往往就在这里:不是功能多,而是顺。

五、给想做小工具的人三条建议

  1. 从一个自己每天都在忍的痛点开始。作者做这个软件,是因为自己每天都要在 Mac 上看书。痛点越具体,需求越清楚。
  2. 先定原则,再写功能。"文档优先""只读不复制""缓存守规范"这三条一旦定下,后面每个功能该不该做都有了判断标准。
  3. 让 AI 写实现,你写判断。AI 能快速产出代码,但"该不该造书架""要不要做全局替换"这类决策,只能由懂用户的人来做。

这也是 AI 时代独立开发最真实的分工:门槛从"会不会写"降到"想不想清楚"。想清楚的人,一个人就能做出一个完整产品。