一个对你的 Mac 说实话的原生系统工具箱。
内存优化真能让"已压缩"降下来,空间清理找的是几十 GB 的大头,每一个数字都能在活动监视器里对得上。
English · 简体中文
## 1.0 正式版 当前版本:**1.0.1**(构建 **101**)。[下载](https://github.com/jasonwong1991/WonderBox/releases/tag/v1.0.1) · [版本说明](docs/releases/v1.0.1.md)。 - **核心温度**:风扇页显示 CPU/GPU 温度摘要,并逐项展示读到的传感器。Intel 可识别的核心键显示核心序号;Apple Silicon 和未知映射保留传感器键名。不以平均值模拟每核温度;未开放的传感器显示不可用。 - **卸载监听插件**:首次启动询问是否安装,也可随时在设置中安装或卸载。插件是独立的、可由 macOS 登录项管理的辅助应用;关闭 WonderBox 后仍监听 `/Applications` 与 `~/Applications`。在 Finder 中删除应用或移入废纸篓后,会打开关联文件确认窗,支持全选/取消全选,确认后移入废纸篓。 - **浮窗增强**:菜单栏/Dock 快捷浮窗补齐 CPU/GPU 温度及一键清理的预计可回收量(约值,含原有默认清理分类,实际释放可能不同),清理后重新估算。 - **自动清理**:默认关闭;首次打开空间清理时询问,支持按缓存阈值(128 MB–100 GB)、时间间隔(1 小时–30 天)或任一条件触发。可在空间清理页和设置中配置、开启或关闭。 ### 1.0.1 卸载体验修复 - 主界面和监听弹窗都有全选/取消全选,后台测量大小不会覆盖勾选。弹窗先显示文件,大小随后补齐;确认删除不再重复扫描所有关联位置。 - 应用列表不再先递归计算每个 `.app` 的完整大小;卸载完成后只更新受影响的应用,不重扫全部应用。 - 两个卸载入口统一先使用 WonderBox 自身的移入废纸篓 API,普通失败才交给 Finder。Cookies 权限拒绝不会再重复请求管理员鉴权;界面会指向当前运行副本的完全磁盘访问设置。目录读取失败也不再生成猜测的 Cookies 文件。 - **更新后请在设置中点一次“重启插件”**,让已运行的监听进程使用新版本;待确认的卸载记录会保留。 ### 后台功能与清理范围 卸载插件改用 FSEvents 目录事件通知,并保留每 30 秒一次的兜底检查。书签确认应用已在废纸篓时立即排队提示,不再固定等待 30 秒;仅发现路径消失而未确认进入废纸篓时保留 8 秒替换保护期。改名、移动和重复安装仍会被区分。它不会删除文件,也不会请求管理员权限。原应用仍在运行、恢复或重新安装时,清理被阻止;无法读取目录时不把它当作卸载证据。系统可能要求在“系统设置 → 通用 → 登录项与扩展”批准插件。插件只在用户登录期间运行;应用被永久删除时,部分组件身份可能缺失,扫描会给出覆盖范围提示。 自动清理每 5 分钟检查一次,**只在 WonderBox 运行期间**执行,关闭主窗口但保持菜单栏驻留仍有效;完全退出后暂停,下次启动继续按保存条件检查。需要登录后自动运行时,请同时开启“登录时启动”。自动清理仅包含已识别且未运行应用的可重建缓存,跳过未知归属、符号链接、聊天缓存、系统缓存、下载、备份、关联应用数据和废纸篓;与其他清理任务互斥,每项处理前再次检查运行状态,关闭开关后停止后续项目。 插件注册必须使用完整 `.app` 包(`./scripts/package_app.sh`),不能以 `swift run` 代替。发布的安装包仍使用 ad-hoc 临时签名,尚未公证,详见[分发说明](docs/DISTRIBUTION.md)。  > 扫描、分析与诊断日志均保留在本机。检查更新会连接 GitHub;日志仅在你手动导出并发送后共享。 ## 为什么是 WonderBox 多数"Mac 清理工具"给你一个漂亮的绿色大数字,然后指望你别去核对。WonderBox 反过来做: - **内存优化真正作用于已压缩内存。** `purge` 只会丢弃文件缓存,所以依赖它的工具永远动不了"已压缩"那一栏。WonderBox 的 root helper 发出的是 macOS 自己在内存紧张时使用的内核级内存压力广播:每个运行中的 App 都会收到通知并释放缓存,缓存背后的压缩页也随之释放。完成后按类别给出前后对比,并点名哪些 App 做出了响应。 - **按 App 归因的内存占用,可以直接下手。** 子进程会合并到宿主 App(Chrome 的 40 个渲染进程只显示一行),并估算每个 App 有多少内存正躺在压缩器或交换空间里。同一行即可退出或强制退出。 - **空间清理找的是几十 GB,不是几十 MB。** 包管理器缓存、Chromium/Electron 网页缓存、沙盒容器缓存、模拟器与 DeviceSupport 文件——这些才是真正塞满开发者硬盘的地方。 - **诚实的数字。** 体积统计超时的项目以 `≥` 标注为下界。结果只说实际发生了什么,没变化就直接说没变化。 - **靠结构保证安全。** 每一次删除都要通过按类别定义的根目录白名单与路径形状校验。用户数据(聊天记录数据库、文档、Docker 虚拟磁盘、工具链)从一开始就不在候选范围内。不是可重建缓存的东西一律移入废纸篓。 ## 功能 ### 内存  - 与活动监视器一致的分类——App 内存、联动内存、已压缩、缓存文件、可用——外加交换空间用量与内核内存压力等级 - 按 App 汇总的物理占用排行,标注每个 App 已压缩或交换的份额,支持退出与强制退出 - 一键优化:系统级内存压力广播 → 文件缓存清理,输出逐类别的前后对比报告 - 概览页的健康横幅同时反映内存压力,而不只是温控状态 ### CPU 与 GPU - 全宽曲线展示最近 60 秒,按真实时间滚动,并显示时间和百分比刻度。GPU 数据缺失和采样中断不会画成空闲时间。 - 按应用汇总实时占用排行,包含辅助进程,每 3 秒刷新;支持搜索、退出与强制退出 - CPU 与活动监视器采用相同口径:占满一个核心为 100%,多核应用可超过 100% - GPU 进程占用来自驱动提供的上下文计数器;不支持的驱动显示 `—`,而非假定为零。并行上下文合计占用与整机 GPU 利用率并非同一指标 - 运行时间包含休眠,与系统信息中的「启动后的时间」一致 ### 空间清理 应用缓存明细按应用名称、图标和缓存总量展示,展开后勾选具体目录。支持搜索;全选/取消全选仅影响当前可见结果。「完成」保存修改,「关闭」或 Escape 保留原选项。 新增独立的微信、企业微信缓存类别,标准和深度扫描均可使用,默认不勾选。仅列出明确的应用/网页缓存目录,不列出聊天数据库和下载附件;缓存移入废纸篓,清理前需退出相关应用。移动每个缓存前再次检查后台辅助进程和确认后才启动的应用。覆盖常规缓存、沙盒与共享容器、WebKit/Qt 配置目录及已知的旧版账号缓存布局。  **标准扫描** — 用户缓存(含沙盒 App 容器)、日志、Xcode DerivedData、超过 7 天的安装包、废纸篓。 **深度清理** 额外覆盖: | 类别 | 覆盖范围 | | --- | --- | | 包管理缓存 | npm、pnpm、yarn、bun、uv 及其他 `~/.cache` 下的工具、Cargo registry、Go modules、Gradle、Maven、CocoaPods——只删下载缓存,工具链与已安装版本绝不触碰 | | 浏览器与 Electron 缓存 | 任意 Profile 或 Electron 用户数据目录中的 Chromium `Cache`、`Code Cache`、`GPUCache`、Service Worker `CacheStorage` 等;对应 App 运行中时自动跳过 | | 开发深层缓存 | 模拟器缓存、iOS/watchOS/tvOS DeviceSupport、文档缓存、Previews 模拟器设备 | | 应用残留 | 已卸载 App 遗留的数据(90 天阈值 + bundle id 启发式判断) | | 设备备份、未完成下载 | 本机 iPhone/iPad 备份;超过 7 天的 `.download`/`.crdownload`/`.part` 文件 | 每个类别都能展开到具体项目,保留这个工具的缓存、删掉那个工具的:  ### 应用卸载 关联文件按用途分组为可展开的文件夹,支持分类勾选与文件夹内容预览。先尝试普通用户权限;失败项目合并交给 Finder 的“移入废纸篓”操作(Apple Events)重试,由 Finder 处理必要的授权。卸载不再安装或授权后台服务,不保存密码。 另外识别应用最近文档记录、自动保存、默认 XDG 数据目录、共享更新/崩溃缓存中的精确产品子目录,以及标识符匹配的外置插件。恢复数据、跨平台共用数据和插件默认待确认。未全选时,详情和卸载确认都会提示保留的关联项目数量与大小;「返回检查」保留原勾选,不自动全选。调研依据、匹配规则和排除范围见[关联文件覆盖矩阵](docs/RELATED_FILES.md)。 关联发现依据应用标识符、原始/本地化名称,识别 `~/Library` 下精确同名的自定义目录、日志和偏好设置;同时检查内嵌 Helper、XPC、扩展及登录项的标识符,从代码签名读取应用组声明,识别可执行路径指向该应用的启动配置。Application Support 在厂商目录下一层用精确产品路径探测匹配的子文件夹,不枚举其他应用的数据内容,不勾选整个厂商目录。共享应用组、独立标识符的组件、声明的特权辅助程序及厂商子目录匹配会注明关联依据,默认不勾选,供确认后选择。没有逐个应用维护的白名单;六种产品样本覆盖不同名称、标识符及存储布局,并验证近似名称、兄弟应用和符号链接等反例。 Electron 应用还通过有限读取根 `package.json`(普通文件或 ASAR 封装)补充运行时产品名称,并检查其声明的启动文件中、临近 `userData` 获取位置的明确旧目录迁移引用。对应的 Application Support 旧版产品目录会列出并注明依据,默认不勾选,避免影响仍在使用的其他版本;不是按名称前缀批量删除。不会搜索依赖包、静态资源或 source map,不执行 JavaScript,不解包资源。读取上限为 2 MiB 归档索引、64 KiB 包元数据和 1 MiB 启动文件;忽略异常偏移、链接、路径穿越和超限文件。应用本体移走后仍保留这些名称用于复查。 排除 Mail、Messages、Keychains 等 macOS 共用目录,不沿符号链接扫描。扫描依据明确的标识和关联证据,并非对任意自定义路径的完整性保证。应用列表与大小排序显示“应用本体 + 已发现的关联数据”(包括未勾选项),详情显示拆分占用。关联列表先显示,大小随后统计;卸载操作不等待统计完成。自动统计采用单个低优先级任务,每个应用共享 60ms / 1,500 项的预算,不再完整遍历每个大型聊天或缓存目录。`≥` 表示至少占用,尚未测量的目录明确显示“待统计”。详情中的“计算完整大小”仅统计当前应用,支持停止,切换应用或页面也会取消旧任务。列表和详情共享会话内缓存,短期失效,刷新或卸载时清空。界面批量更新,缓存排序及汇总结果,目录去重改为 O(n log n),减少主线程重复运算。列表汇总对共用及嵌套的数据目录去重;勾选项只影响移入废纸篓的大小,不改变已发现的应用总占用。 空间清理的项目弹窗使用一个「全选 / 取消全选」切换按钮;「完成」保存更改,「关闭」或 Escape 放弃草稿并保留原选项。ZIP 仅在包含应用、安装包或磁盘映像时归类为安装包。 点击项目弹窗的「名称」或「大小」表头即可排序,应用分组与展开的缓存文件夹一起生效;大小首次点击从大到小,再次点击反向。排序保留勾选和展开状态,未知大小始终排在最后。 设置中的独立「开机启动」区域可配置 WonderBox 自身登录时启动,显示待批准状态,并提供系统登录项管理入口;从系统设置返回时自动同步状态。  盘点 `/Applications` 与 `~/Applications`,从 Spotlight 读取体积、安装日期与最近使用时间;大型/久未使用筛选;逐 App 列出关联的缓存、偏好设置、容器与保存状态;全部移入废纸篓,随时可恢复。 沙盒容器通过应用标识符与容器元数据匹配,支持 UUID 命名;读取受限会提示权限问题,不再静默当作没有关联文件。选择废纸篓里的 App 时,仅移除关联文件,不重复移动应用本体。卸载后检查已选路径并重新扫描,保留失败项目供重试,新发现的残留默认不勾选。卸载前需退出应用,避免重新生成数据。 卸载失败显示系统实际返回的错误,保留未移除项目供重试,并提供“详细信息”和“在 Finder 中显示未移除项目”。取消系统操作后不会自动再次请求授权。需要时由系统请求控制 Finder 的自动化权限;被拒绝时提示打开“自动化”设置,而不是要求重新开启完全磁盘访问。 ### 磁盘分析 工具栏刷新按钮与 **⌘R** 刷新当前页面,不再仅更新概览。CPU/GPU、内存会同时更新系统指标和应用排行;卸载页重扫应用及当前应用的关联文件;空间清理只重扫、不执行清理;磁盘分析忽略缓存并重扫当前目录。设置页刷新权限、登录项、日志大小和更新状态。刷新不会启动内存优化、调整风扇模式或延长保持唤醒时间。 进入目录先显示文件列表,后台最多四个可取消任务逐项补充目录大小,不再阻塞导航。返回已浏览目录可使用 60 秒缓存,「重新扫描」强制刷新。尚未统计完整的总量显示为下界;不自动遍历云同步目录。  逐层深入任意文件夹,体积并行计算;按大小/名称/日期排序,在 Finder 中显示或将所选项目移入废纸篓。云同步目录不参与体积统计,扫描绝不会触发下载。 ### 风扇控制、保持唤醒、菜单栏![]() |
![]() |