# 2026-06-29 Pro 显示模式与设置页清理 ## 用户目标 - 将“彩色容器”和“彩色网格”改为 Pro 专用能力。 - 免费用户支持与 Pro 主题一致的 5 分钟试用倒计时;试用期间不写入真实偏好。 - 用户手动验证后要求停止 GUI QA。 - 删除设置页多个页签里重复出现的“当前免费 / 待解锁 Pro 功能”总览卡,保留具体功能位的 Pro 标识和关于页差异表。 ## 已完成事项 - 在 `ProEntitlementPolicy` 中增加 Pro-only 显示模式集合:`coloredContainer`、`coloredGridContainer`。 - 增加 `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 页的 `proStatusCard` 和 `settingsProComparisonTable` 调用。 - 已删除对应的 `proCardTitle`、`proCardSummary`、`proComparisonFeatures`、`settingsProComparisonTable`、`proStatusCard`、`SettingsProComparisonFeature` 代码。 - 已更新 `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.fill`、`tag.fill`、`externaldrive.fill` 改为 `paintpalette`、`tag`、`externaldrive`。 - 新增 `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`。