MACOS UTILITY / HIGH-TRUST ACTION

Cleaner

把高风险的磁盘清理,做成一套先解释、再选择、最后执行的本地诊断流程。

角色
产品设计与原生工程(风险模型 / 本地诊断)
时间
2026 · local macOS build, ongoing
平台
macOS / SwiftUI / SwiftPM

清理不是找到最多能删的文件,而是让每一次删除都能被理解和确认。

01 / Context

不是“一键清理更多”

磁盘清理涉及不可逆删除。真正的问题不是找到更多文件,而是让用户理解空间归因、风险与后果。
Cleaner macOS interface showing storage attribution and cleanup review
Reviewed demo interface

界面先解释空间从哪里来,再让用户检查候选项和风险。

01

02 / Framing

信任来自看得见的边界

  • 把推荐项、可选项和高风险项分开。
  • 风险说明必须早于清理按钮。
BLACK BOX能删就删

结果快,但边界不可见

EXPLAINED先解释风险

推荐、可选与高风险分开

Product risk model

产品判断从“最大清理量”转向“可解释的安全边界”。

02

03 / Decision

先诊断机器,再决定是否删除

空间不足可能与热点进程、Spotlight 或 headless 浏览器残留共同发生,因此产品同时展示机器健康快照。
01CPU busy
02Hot processes
03Spotlight
04Browser residue
05Disk free
06User folders
CleanerCore diagnostics

磁盘问题与 CPU、索引和浏览器残留一起被观察,不把清理孤立成单次动作。

03

04 / Flow

把删除放到流程后半段

Observe → Attribute → Review → Clean → Guard 是产品的安全顺序,也是界面的阅读顺序。
01Observe
02Attribute
03Review
04Clean
05Guard

观察 → 归因 → 审核 → 清理 → 持续守护

Service flow

操作按钮被放在归因和审核之后,避免把删除变成默认答案。

04

05 / Boundary

本地优先,也要范围优先

Cleaner 聚焦用户目录,系统路径默认避开;.noindex 和临时项迁移用于减少问题复发,但不默认移动已有内容。
USERHome folders

Primary scope

SYSTEMProtected paths

Avoid by default

TEMPTop-level items

Opt-in migration

INDEX.noindex roots

Managed guard

DELETEExplicit confirm

User-owned action

Repository boundary review

扫描以用户目录为主,已有内容默认不移动;临时项迁移必须显式开启。

05

06 / Delivery

证据包括不能声称的部分

SwiftUI / SwiftPM 架构、本地 App 和测试 targets 都存在;当前环境的 XCTest 限制被明确保留。
APPCleanerApp
CORECleanerCore
BUILDCleaner.app
TESTXCTest targets
LIMITToolchain blocked
CLAIMNo false pass
Repository verification

仓库与本地 App artifact 可核验;本轮工具链无法加载 XCTest,因此不声称测试通过。

06

体验深描

痛点、用户故事与交互设计

这一段不讲技术栈,只讲「人在什么处境下用它、哪里卡住、我做了什么回应」。

我的痛点

这些项目都从我自己被卡住的地方开始。

  1. P01

    磁盘突然满了,系统只告诉我「其他」占了两百多 G——等于什么都没说。

  2. P02

    同类清理工具把「能删」当成「该删」,一键之后我不知道自己失去了什么。

  3. P03

    看不到风险边界,就建立不了信任;建立不了信任,这类工具我就不敢用。

  4. P04

    清完过两周又满,说明单次扫描解决不了根因。

  5. P05

    机器发烫、CPU 高和磁盘变满往往同源(残留的 headless 浏览器、Spotlight 索引),却没有工具把它们放在一起看。

用户故事

写成「作为…我想…以便…」,每条对应一个可验证的产品动作。

  • US01

    作为磁盘突然变满的人,我想先看到空间到底由什么构成,以便知道该从哪下手。

  • US02

    作为怕误删的人,我想每个候选项都标注风险等级,以便由我决定删不删。

  • US03

    作为不信任「一键」的人,我想逐项勾选并确认,以便清理是我的选择而不是工具替我做的决定。

  • US04

    作为机器反复发烫的人,我想同时看到 CPU 热点进程与残留浏览器,以便找到反复出现的根因。

  • US05

    作为长期使用者,我想临时目录被 .noindex 持续守护,以便同一个问题不再复发。

用户体验旅程

按真实使用顺序展开:此刻在做什么 / 哪里有摩擦 / 产品怎么回应。

阶段此刻在做什么摩擦点产品回应
01Observe 观察
机器变慢或变满,先想知道现在到底什么状况。
症状(发烫 / 变满 / 卡顿)分散在不同工具里,看不出关联。
机器健康快照同时观察 CPU busy、热点进程、Spotlight、headless 浏览器残留与磁盘余量。
02Attribute 归因
想知道两百 G 到底是谁占的。
大多数工具跳过解释,直接给「清理建议」。
扫描后先展示存储空间归因,把「解释」放在「操作」前面。
03Review 审阅
面对一长串候选项,需要判断哪些能动。
一视同仁的列表让人无从下手,只能全选或全不选。
候选项分为可操作项、高风险项与推荐项,并以用户目录优先。
04Clean 执行
确认要清理的项目并执行。
「一键清空」式设计是误删的主要来源。
逐项选择与确认,没有全选默认;清理后给出报告说明动了什么。
05Guard 守护
希望这次清理之后问题不要复发。
临时文件会持续堆积,单次清理只是延后问题。
提供 .noindex 受管目录准备与显式开启的临时项迁移,不默认移动已有内容。

交互细节

决定「用起来顺不顺」的微观判断。

解释先于按钮
风险说明在版面上必须排在清理按钮前面——位置本身就是产品态度。
没有一键清理主按钮
主路径固定为 Scan → Review → Select → Clean,先诊断再操作。
扫描聚焦用户目录
扫描逻辑以用户目录为主,明确避开系统级高风险路径。
迁移不隐式发生
.noindex 受管目录需要显式开启,工具不会自作主张搬动已有内容。
清理后给报告
执行完成后说明释放了多少、动了哪些路径,让每次操作可复盘。

设计细节

视觉系统、状态语言与节奏上的取舍。

把清理做成诊断界面
目标不是「删得多」,而是让人读懂机器状态后自己做决定,从而降低恐惧感。
风险分层的视觉语言
可操作 / 高风险 / 推荐三类使用不同的视觉权重,避免用户在同一层级里误判。
本地窗口应用形态
高敏感操作不依赖云端,SwiftUI 桌面应用的形态与信任要求匹配。
五种状态各自可读
扫描、选择、报告、机器健康与持续守护各有独立的状态呈现,不复用同一种强调方式。