edit | blame | history | raw

7.9.0 容器内 App 手动排序实现与 QA 记录

实现范围

  • 数据层新增 containerAppOrder,用稳定容器 ID 保存每个容器内的 App 路径顺序。
  • 普通标签使用 tag:<tagName>;系统分类使用 system:<SmartCategoryID>;未分类和 Apple 内置使用固定特殊 ID。
  • TagGroupAppLibrarySnapshotContentViewAppIndexer.group 贯通容器 ID 和排序数据。
  • 同容器拖拽排序只改变显示顺序,不改变 App 与标签的归属关系。
  • 跨容器移动、Option 复制、拖空白移除、Apple 内置保护继续走原有逻辑。
  • 排序变化纳入分类方案 fingerprint,自动上一方案、导出导入、备份恢复都会包含排序字段。

关键文件

  • src/Apptag/DataLayer.swift
  • src/Apptag/AppGridCollectionView.swift
  • src/Apptag/AppDragCoordinator.swift
  • src/Apptag/ContentView.swift
  • src/Apptag/AppLibraryController.swift
  • src/Apptag/SmartCategorization/SmartStartService.swift
  • src/Scripts/app_ordering_data_qa.sh

QA 结果

  • bash Scripts/app_ordering_data_qa.sh:通过。
  • bash Scripts/macos14_availability_typecheck_qa.sh:通过。
  • bash Scripts/macos14_build_metadata_qa.sh:通过。
  • bash Scripts/quick_search_app_name_qa.sh:通过。
  • bash Scripts/quick_search_system_app_qa.sh:通过。
  • bash Scripts/smartstart_catalog_resource_qa.sh:通过。
  • bash Scripts/window_logic_qa.sh:通过。

代码复审处理

  • 复审发现同容器排序拖拽贴近源容器边缘释放时,可能落入旧的“拖到空白移除标签”路径;已改为识别最近同容器排序区域并取消该类 near-edge empty drop。
  • 复审发现 Apple 内置容器同容器 no-op / Option drop 会误触发保护提示;已在 AppGrid 层消费同容器 drop,并在 ContentView.dropApp 增加同源同目标 no-op 防线。
  • 文档引用统一使用 Git 跟踪的 docs/7.90 路径,避免大小写敏感环境出现断链。
  • Scripts/app_ordering_data_qa.sh 已补充对应静态门禁。

风险与边界

  • 第一版只做同容器排序,不做跨容器插入式重排。
  • 排序 key 不依赖当前语言显示名,语言切换不会改变顺序归属。
  • 新安装或新扫描到、未出现在排序字段里的 App 会追加到已排序 App 后面,并按原有默认名称排序。
  • GUI 真实手感仍需要用户用 DMG 或本机构建做最终体验验收,重点看拖拽插入线是否符合预期。