7.9.0 产品 PRD:容器内 App 手动排序
1. 背景
TagLauncher 当前支持按标签/容器展示 App,也支持拖动 App 改变标签归属。但在同一个容器内,App 的显示顺序主要来自扫描后的默认名称排序,用户无法把高频 App 固定到自己习惯的位置。
对重度用户来说,容器不仅是分类,也是工作流入口。用户希望像整理桌面图标一样,在每个容器中把 App 摆成自己的顺序,并且这个顺序能随“分类与布局”一起保存、导入、恢复。
2. 目标
- 用户可以在同一个容器/分组内拖动 App,改变该容器内显示顺序。
- 自定义顺序在刷新、重启、语言切换、导入导出、恢复上一方案、SmartStart 回滚后保持一致。
- 不破坏现有跨容器拖动改标签、Option 复制、拖到空白移除标签、Apple 内置组保护等既有行为。
- 将该需求作为
7.9.0 大版本需求管理。
3. 用户价值
- 高频 App 可以放到容器最前面,减少寻找成本。
- 每个标签/容器可以形成独立工作流顺序。
- 多标签 App 在不同容器里可以有不同位置,符合不同使用语境。
- 导出“分类与布局”时真正包含布局顺序,便于迁移和恢复。
4. 适用用户
- 安装 App 数量较多、依赖 TagLauncher 做日常启动入口的用户。
- 已经维护多个标签/容器,并希望在容器内进一步精细整理的用户。
- 需要在多台 Mac 或重装后恢复分类与布局的用户。
5. 范围
5.1 版本 7.9.0 必做
- 同一容器内拖动 App 改变顺序。
- 每个容器独立保存顺序。
- 多标签 App 在不同容器中的顺序互不影响。
- 新 App 或未记录 App 在自定义顺序之后按默认规则显示。
- 删除/卸载 App 后不显示空位、不崩溃。
- 顺序纳入分类与布局数据,可导出、导入、恢复。
- 旧用户数据无顺序字段时保持原有默认排序。
5.2 版本 7.9.0 不做
- 不做跨容器插入位置排序。
- 不改变跨容器拖动的标签归属语义。
- 不改变 Quick Search 结果排序。
- 不提供“按名称重新排序”“重置单个容器顺序”等高级管理入口。
- 不做跨机器 bundle id/name fallback 的完整稳定匹配;第一版以 path 为 App 顺序身份。
6. 核心交互
6.1 同容器排序
用户在 App Grid 普通展示态中,长按并拖动某个 App 到同一容器中的另一个位置。
期望:
- 拖动过程中显示清晰的插入位置提示。
- 松手后该 App 移动到目标位置。
- 不改变该 App 的标签归属。
- 不触发 App 启动。
6.2 跨容器拖动
用户把 App 拖到其他容器/标签。
期望:
- 沿用现有移动/复制标签逻辑。
- 按住 Option 时继续执行复制标签语义。
- 不把跨容器拖动解释为排序。
6.3 拖到空白区域
用户把 App 拖到容器外空白区域。
期望:
- 继续沿用现有移除来源标签或归为未分类确认逻辑。
- 不因为新增排序功能改变提醒、确认或“不再提醒”逻辑。
6.4 特殊容器
- “未分类”容器:第一版允许读取排序;是否开放拖动排序按实现风险在开发阶段确认。
- “Mac 自带 / Apple 内置”容器:保持现有保护逻辑,不允许通过拖动改变系统标签归属;排序是否开放需单独评估,默认不作为第一优先级。
7. 数据行为
- 自定义顺序属于“分类与布局方案”。
- 导出分类与布局时必须包含顺序。
- 导入分类与布局时必须恢复顺序。
- 恢复上一方案时必须恢复顺序。
- SmartStart 应用新方案前的备份必须包含顺序。
- “重置为未分类”应清理旧容器顺序,避免旧布局在未来意外复活。
8. 兼容性要求
- macOS 14 起可用。
- 旧
tags.json 无新增字段时可正常读取。
- 旧版本 App 读取新 JSON 时不应破坏已知字段;新版本 App 重新读取后仍应尽量保留顺序。
- 语言切换不影响顺序,因为顺序 key 不能依赖本地化显示名。
9. 验收标准
- 用户可在同容器内完成拖动排序。
- 排序结果立即显示。
- 关闭并重新打开 App Grid 后顺序保持。
- 重启 App 后顺序保持。
- 切换语言后顺序保持。
- 导出再导入后顺序保持。
- 恢复上一方案后顺序恢复。
- 跨容器拖动、Option 复制、拖到空白、Apple 内置保护保持现有行为。
- 旧数据用户升级后默认顺序不变。
10. 发布要求
- 版本号从
7.9.0 开始。
CHANGELOG.md 必须记录数据模型、交互范围和兼容性说明。
- 发布前必须有 QA 报告,覆盖数据层、UI 手工拖拽、macOS 14、导入导出、恢复、SmartStart 回归。
11. 未决问题
- “未分类”容器是否开放拖动排序。
- “Mac 自带 / Apple 内置”容器是否开放仅显示顺序排序。
- 是否需要在后续版本提供“重置当前容器顺序”入口。
- 是否需要在后续版本支持跨机器导入时基于 bundle id/name 匹配顺序。