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。