首页 / 博客 / 设计手记

设计手记

小组件设计笔记:一天五个时刻,以及为什么上面没有删除按钮

桌面小组件是 拾缕 里最「外向」的部分:它替 App 站在锁屏和首屏上,把相册的近况讲给你听。这篇手记记录它的几条设计决定。

一天五个时刻

小号小组件不是一张静态卡片,而是一份随时间轮换的「节目单」:

同样是「进度」,早上讲是鞭策,晚上讲就是压力。把信息放进对的时刻,比把所有信息塞进一屏更重要。

11 种状态与回退链

小组件的输入只有一份:主 App 写入 App Group 的快照(进度、连击、回忆、故事摘要、压缩到 512px 的缩略图)。快照里少任何一块,界面都不能出现「空白面板」。所以我们给每个版位定义了回退链——没有回忆就回退到故事视觉,没有故事就回退到引导卡,11 种状态逐一截图归档、逐一验证。

Widget 的照片预览由主 App 提前准备。互动保留写入共享事务账本并通过 StoreKit 验证权益;相册权限与真正删除仍由 App 处理。

为什么上面没有删除按钮

删除永远发生在 App 内,经过 iOS 系统确认。

这是从第一天就定下的硬规矩。整理是在轻松的心态下做判断,删除则值得一次郑重的确认;把删除从桌面上拿掉,是给「误触」留出物理距离。小组件上唯一的写动作是「✓ 保留」——它通过 iOS 17 的交互式组件(AppIntent)直接写入共享的决策存储,连 App 都不用打开。

深链与状态恢复

每个版位点击后通过 photokeep:// 深链回到对应界面:回忆进日历、提醒进整理、故事进故事页。主 App 侧则在决策变化、故事生成、退后台等时机重写快照并刷新时间线,进程重启后再从本地缓存找回最近的故事摘要,保证「你刚看过的一句话」不会凭空消失。

相关的技术边界在上一篇:「每日故事」是怎么写出来的