edit | blame | history | raw

26.0701-Taglauncher.Coder3-标签额度开发

用户目标

实现 TagLauncher 8.3.0:

  • /Users/ar/Projects/Taglauncher/src/Docs/Requirements/2026-07-01-pro-custom-container-quota-prd.md 落地免费版自定义维护容器额度。
  • 按 Mindraw frame mdoc_18bd9996566de820_141b0 / iEXQHHqj-EOJsP4pk3F8d 更新 Pro 对比表前三项。
  • 做完后统一自动化 QA,通过后生成新的 DMG 给用户最终验收。
  • 约束:改动范围尽可能小,不破坏已验收功能。

已完成事项

  • 新增 Pro 功能口径 customContainerQuota,免费额度为 6 个自定义维护容器,Pro 不限。
  • TagDef 增加可选字段 isCustomMaintained,兼容旧数据缺字段解码。
  • 数据层统一拦截新建标签、系统分类改名、系统分类改基础色、手动添加/移除应用标签、拖拽移动应用导致的系统分类成员变更。
  • 第 7 个自定义维护动作不写入临时数据,返回 blockedCustomContainerQuota,UI 弹 Pro 提示。
  • 弹窗第二按钮为“管理已有标签”:主界面进入标签编辑,设置页切到标签页;其它 Pro 弹窗仍保留恢复购买。
  • 标签拖动排序改为免费仅预览,Pro 才调用 TagEditor.reorderTags 持久保存。
  • 标签编辑页和设置标签页顶部显示自定义容器额度倒计数。
  • Pro 页对比表新增前三项:
  • 可维护标签数量:免费最多 6 个,Pro 没有限制。
  • 自定义排序:标签在列表中的位置(=容器显示位置):免费只可预览,Pro 支持。
  • 自定义排序:容器内应用图标位置:免费只可预览,Pro 支持。
  • 补齐 29 个本地化 JSON 的新增文案。
  • 新增专项 QA:/Users/ar/Projects/Taglauncher/src/Scripts/pro_custom_container_quota_qa.sh
  • 版本更新为 8.3.0,build 为 20260701.1530
  • 生成并验证 DMG:
  • /Users/ar/Projects/Taglauncher/src/build/TagLauncher-8.3.0-20260701.1530.dmg
  • SHA256:57ee615bd7d733f653dc12a05b0903592d38bdae1e9515b8f7745ce769ee5cad

核心事实 / 变更快照

  • 变更对象:免费 / Pro 标签维护权限矩阵。
  • 事实来源:
  • /Users/ar/Projects/Taglauncher/src/Apptag/ProEntitlement.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/DataLayer.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/PreferencesView.swift
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_custom_container_quota_qa.sh
  • 变更前:
  • 免费用户可以创建/维护不限数量标签。
  • 标签拖动顺序会直接持久保存。
  • Pro 对比表没有“可维护标签数量 / 标签顺序保存 / 容器内应用图标位置保存”三项。
  • 变更后:
  • 免费用户最多可维护 6 个自定义容器。
  • 用户自建标签天然计入额度。
  • 默认 SmartStart / 系统智能分类只有在被改名、改基础色、设置自定义颜色或手动调整应用成员后才计入额度。
  • 未分类Mac 自带 不作为自定义维护容器计数。
  • 删除标签会释放对应额度;旧用户超过 6 个的既有数据不删除、不隐藏,但进一步新增维护需要 Pro 或先清理。
  • 免费用户拖动标签顺序只改变当前界面预览,不持久化;Pro 用户才保存。
  • 容器内应用图标位置继续沿用现有 Pro 排序持久化逻辑:免费只预览,Pro 保存。
  • 范围边界:
  • 没有增加维护次数限制。
  • 没有做“第 7 个标签临时预览后失效”的逻辑。
  • 没有改 Quick Search、主题预览、购买/恢复购买主流程。

文件变更

本轮核心文件:

  • /Users/ar/Projects/Taglauncher/src/Apptag/ProEntitlement.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/ProAccessViews.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/DataLayer.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/TagEditorView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/ContentView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/PreferencesView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/Info.plist
  • /Users/ar/Projects/Taglauncher/src/CHANGELOG.md
  • /Users/ar/Projects/Taglauncher/src/Apptag/Localization/*.json
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_custom_container_quota_qa.sh
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_feature_gate_qa.sh
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_localization_qa.sh
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_custom_hotkeys_qa.sh

工作区内还有本轮开始前已存在的 .gitignore 和旧 Release 文档脏改动;本轮没有回退这些文件。

QA / 验证证据

通过的命令:

cd /Users/ar/Projects/Taglauncher/src
bash Scripts/pro_custom_container_quota_qa.sh
bash Scripts/pro_feature_gate_qa.sh
bash Scripts/pro_localization_qa.sh
bash Scripts/pro_tag_custom_color_qa.sh
bash Scripts/pro_notes_quota_qa.sh
bash Scripts/theme_settings_qa.sh
bash Scripts/app_ordering_data_qa.sh
bash Scripts/quick_search_launch_contract_qa.sh
bash Scripts/pro_display_mode_preview_qa.sh
bash Scripts/pro_theme_preview_countdown_qa.sh
bash Scripts/pro_custom_hotkeys_qa.sh
bash Scripts/macos14_build_metadata_qa.sh
bash Scripts/macos14_availability_typecheck_qa.sh
bash Scripts/smart_category_localization_qa.sh
bash Scripts/smartstart_default_categories_qa.sh
bash Scripts/tag_double_click_preferences_qa.sh
APP_BUILD=20260701.1530 bash build.sh
bash make_dmg.sh
hdiutil verify build/TagLauncher-8.3.0-20260701.1530.dmg
codesign --verify --deep --strict --verbose=2 build/TagLauncher.app

关键验证结果:

  • build/TagLauncher.app 构建成功,版本 8.3.0,build 20260701.1530
  • hdiutil verify 显示 DMG checksum VALID。
  • codesign --verify --deep --strict 通过。

可复用命令 / Runbook

用途:重新构建并生成同一版本验收 DMG。

前置条件:位于 /Users/ar/Projects/Taglauncher/src,源码版本为 8.3.0,build 使用 20260701.1530

cd /Users/ar/Projects/Taglauncher/src
APP_BUILD=20260701.1530 bash build.sh
bash make_dmg.sh
cp build/TagLauncher.dmg build/TagLauncher-8.3.0-20260701.1530.dmg
hdiutil verify build/TagLauncher-8.3.0-20260701.1530.dmg
codesign --verify --deep --strict --verbose=2 build/TagLauncher.app
/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' build/TagLauncher.app/Contents/Info.plist
/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' build/TagLauncher.app/Contents/Info.plist
shasum -a 256 build/TagLauncher-8.3.0-20260701.1530.dmg

搜索关键词:8.3.020260701.1530freeCustomContainerLimitcustomContainerQuotapro_custom_container_quota_qaTagLauncher-8.3.0-20260701.1530.dmg

未决问题

  • 需要用户人工验收 DMG 的真实 UI 和交互。
  • 尚未创建提交或发布 tag;当前工作区仍有本轮外的既有脏改动。

后续建议

  • 用户验收通过后,再按发布流程做代码冻结、提交、tag、App Store 上传资料。
  • 本轮存档一开始误用了旧命名 2026-07-01-标签额度开发.md,已按全局规则修正为 26.0701-Taglauncher.Coder3-标签额度开发.md
  • COMMANDS.md 只应作为命令索引,不应替代会话记录;8.3.0 条目已改为导航信息,完整 Runbook 保留在本文件中。
  • 项目本地 AGENTS.md 仍含旧会话命名格式,后续应单独改为只声明保存目录,命名规则回指全局 session-memory.md