edit | blame | history | raw

2026-06-29 Pro 显示模式与设置页清理

用户目标

  • 将“彩色容器”和“彩色网格”改为 Pro 专用能力。
  • 免费用户支持与 Pro 主题一致的 5 分钟试用倒计时;试用期间不写入真实偏好。
  • 用户手动验证后要求停止 GUI QA。
  • 删除设置页多个页签里重复出现的“当前免费 / 待解锁 Pro 功能”总览卡,保留具体功能位的 Pro 标识和关于页差异表。

已完成事项

  • ProEntitlementPolicy 中增加 Pro-only 显示模式集合:coloredContainercoloredGridContainer
  • 增加 ProDisplayModePreviewState,复用 ProEntitlementConfig.themePreviewDuration,免费试用倒计时为 5 分钟。
  • 免费态读取存量彩色显示模式时回落到免费模式:
  • coloredContainer -> container
  • coloredGridContainer -> gridContainer
  • ContentView 和设置页均改为使用 effectiveDisplayMode,避免直接渲染锁定的裸 displayMode
  • 设置页显示模式按钮增加固定右侧 accessory 槽位:
  • 免费未试用:彩色选项显示 Pro badge。
  • 免费试用中:被试用的彩色选项显示 MM:SS 倒计时。
  • Pro 已解锁:彩色选项按普通选项显示。
  • 新安装默认显示模式从 coloredGridContainer 改为 gridContainer
  • 删除快捷键、标签、数据、关于页中重复的 Pro 总览卡及对应 helper/type。
  • 更新 QA 脚本,新增 pro_display_mode_preview_qa.sh,并让 pro_feature_gate_qa.sh 反向禁止重复 Pro 总览卡回归。
  • 生成验证用 DMG:/Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg

关键决策

  • 彩色容器 / 彩色网格归入现有 .premiumThemes 权益口径,不新增一个对用户可见的 ProFeature,避免新增文案面和购买提示分叉。
  • 主题预览和彩色显示模式预览一次只允许存在一个活动 preview,防止状态行和倒计时来源冲突。
  • 预览只写 ProEntitlementSnapshotStore.previewDisplayMode,不写 @AppStorage("displayMode");用户真正解锁 Pro 后才持久化当前 preview。
  • 设置页删除的是重复总览卡,不删除具体按钮上的 Pro badge、倒计时、解锁入口、关于页免费 / Pro 对比表。

文件变更

  • src/Apptag/ProEntitlement.swift
  • src/Apptag/PreferencesView.swift
  • src/Apptag/ContentView.swift
  • src/Apptag/AppDefaults.swift
  • src/Scripts/pro_display_mode_preview_qa.sh
  • src/Scripts/pro_feature_gate_qa.sh
  • src/Scripts/pro_theme_preview_countdown_qa.sh
  • src/Scripts/theme_settings_qa.sh
  • CODEGRAPH.md

QA / 构建结论

  • bash src/Scripts/pro_display_mode_preview_qa.sh:通过。
  • bash src/Scripts/pro_theme_preview_countdown_qa.sh:通过。
  • bash src/Scripts/pro_feature_gate_qa.sh:通过。
  • bash src/Scripts/pro_localization_qa.sh:通过。
  • bash src/Scripts/theme_settings_qa.sh:通过。
  • cd src && bash build.sh:通过,产物 src/build/TagLauncher.app
  • cd src && bash make_dmg.sh:通过,产物 src/build/TagLauncher.dmg
  • hdiutil verify build/TagLauncher.dmg:通过。
  • codesign --verify --deep --strict --verbose=2 build/TagLauncher.app:通过。
  • DMG SHA256:205e0f2f05fe8352a93d967a8bb51820953fb1e10f0b271cdd132481a4b6c5bc

未决问题

  • 当前工作区存在大量与本轮无关的既有删除和未跟踪文件,本轮未处理。
  • 用户已手动验证彩色容器 / 彩色网格 Pro 试用效果;按用户要求停止 GUI QA,没有继续做新的截图点击验证。

后续建议

  • 若进入发布冻结,基于当前 src/build/TagLauncher.dmg 做一次安装级冒烟即可。

追加记录:About 页 Pro 区块删除

  • 用户指出 About 页红框中的 Pro 展示区域仍然过重,要求删除。
  • 已删除 About 页的 proStatusCardsettingsProComparisonTable 调用。
  • 已删除对应的 proCardTitleproCardSummaryproComparisonFeaturessettingsProComparisonTableproStatusCardSettingsProComparisonFeature 代码。
  • 已更新 pro_feature_gate_qa.sh,改为禁止 About 页重新渲染这些 Pro 汇总 / 对比组件。
  • 保留 About 页下方 App 信息、帮助文档按钮和链接按钮。
  • 追加验证:
  • bash src/Scripts/pro_feature_gate_qa.sh:通过。
  • bash src/Scripts/pro_display_mode_preview_qa.sh:通过。
  • bash src/Scripts/pro_localization_qa.sh:通过。
  • bash src/Scripts/theme_settings_qa.sh:通过。
  • git diff --check -- src/Apptag/PreferencesView.swift src/Scripts/pro_feature_gate_qa.sh:通过。
  • cd src && bash build.sh:通过。
  • cd src && bash make_dmg.sh:通过。
  • hdiutil verify build/TagLauncher.dmg:通过。
  • codesign --verify --deep --strict --verbose=2 build/TagLauncher.app:通过。
  • 更新后的 DMG SHA256:c6f9f6e162ea6ac0b460bc42f01247966ac60a3c4a1547a2d71724912a751c5a

追加记录:Pro 独立页签与线型图标

  • 用户要求设置页顶部图标统一线型,主题 / 标签 / 数据不再使用填充图标。
  • 已将 paintpalette.filltag.fillexternaldrive.fill 改为 paintpalettetagexternaldrive
  • 新增 Pro 页签,位置在数据之后、关于之前,图标使用线型 crown
  • 顶部页签从 7 个变成 8 个后,将 tab 间距从 8 调整为 6,单项尺寸从 108x74 调整为 94x72,整体占宽不超过原先 7 个页签。
  • Pro 页签内展示免费版与 Pro 版差异表,包含:
  • 自定义标签颜色。
  • 彩色容器 / 彩色网格。
  • 高级主题。
  • 自定义快捷键。
  • 自定义应用备注。
  • 数据导入导出 / 分类与布局备份恢复。
  • About 页保持干净,不恢复 Pro 汇总卡或免费 / Pro 差异表。
  • 已更新 pro_feature_gate_qa.sh,检查 Pro 页签、线型图标、压缩后的 tab 尺寸和 Pro 页对比表。
  • 追加验证:
  • bash src/Scripts/pro_feature_gate_qa.sh:通过。
  • bash src/Scripts/pro_localization_qa.sh:通过。
  • bash src/Scripts/theme_settings_qa.sh:通过。
  • bash src/Scripts/pro_display_mode_preview_qa.sh:通过。
  • git diff --check -- src/Apptag/PreferencesView.swift src/Scripts/pro_feature_gate_qa.sh:通过。
  • cd src && bash build.sh:通过。
  • cd src && bash make_dmg.sh:通过。
  • hdiutil verify build/TagLauncher.dmg:通过。
  • codesign --verify --deep --strict --verbose=2 build/TagLauncher.app:通过。
  • 更新后的 DMG SHA256:5806753f953e4e53eb978c437b4857ea60b3736b699016fcb0440f5d8c1dc1f5