2026-06-26 Pro 购买测试方案
用户目标
- 阅读
Docs/X-01产品文档/2026-06-25-PRD-免费版与Pro解锁.md。
- 基于当前项目是 macOS 本地 App、未来接入 StoreKit 2 的前提,输出“购买 / 恢复 / 老用户迁移”测试落地方案。
- 重点覆盖:新用户免费态、购买成功、取消、失败、恢复购买、老用户
originalAppVersion 自动 Pro、originalPurchaseDate 兜底、离线启动、退款 / 撤销、Family Sharing。
- 仅做分析,不修改业务文件。
已完成事项
- 读取项目入口规则、
CODE_GOVERNANCE.md、前置讨论规则、QA 规则、交付门禁、会话记忆规则。
- 读取 PRD 全文。
- 检查当前仓库状态、分支和 worktree。
- 读取近期同主题会话:
.codex-sessionhistory/2026-06-25-Pro商业模式.md
.codex-sessionhistory/2026-06-26-Pro权益链路.md
- 扫描当前
src/ 与 Docs/,确认:
- 当前仓库没有现成 StoreKit / IAP 代码。
- 当前项目是本地数据驱动的 macOS 单体 App。
- 当前 QA 交付习惯是
src/Scripts/*.sh + src/Release/.../QA_RELEASE_EVIDENCE.md。
- 用 Apple 官方资料核对以下事实:
AppTransaction.originalAppVersion 在 sandbox 恒为 1.0。
AppTransaction.originalPurchaseDate 在 sandbox 恒为 2013-08-01 12 AM PDT。
- refund request 可在 sandbox 与 Xcode StoreKit Testing 中测试。
- Family Sharing 需用 Sandbox Test Families 验证。
关键决策
- 第一版测试策略不追求“购买链路全自动”;更低风险路径是:
- 把“谁是 Pro”做成可注入 fixture 的确定性状态机自动化。
- 把真实 StoreKit 购买 / 恢复 / refund / Family Sharing 放到 sandbox 与 TestFlight 半自动验证。
- 老用户迁移不能只靠 sandbox 真值验证,因为 Apple 官方文档明确
originalAppVersion / originalPurchaseDate 的 sandbox 值不具备真实边界意义。
- 因项目不引入账号系统和服务端,退款 / 撤销 / Family Sharing 取消共享的预期应定义为:
- 在线且拿到明确已验证撤权信号时撤权。
- 离线时保留最近一次已验证权益,不做激进降级。
- 发布前必须同时具备三类证据:
- fixture 级自动化证据;
- sandbox / TestFlight 真链路证据;
- 对“sandbox 无法证明真实老用户边界”的限制说明,以及上线首日老用户抽检预案。
文件变更
- 未修改业务源码或产品文档。
- 新增本轮会话摘要:
.codex-sessionhistory/2026-06-26-Pro购买测试方案.md
未决问题
- 免费 + Pro 首个正式版本号 / build 截止点尚未冻结。
originalPurchaseDate 兜底所用绝对时间点尚未冻结。
- Lifetime Pro 的最终 product ID 尚未冻结。
- 是否为购买链路补最小 Xcode StoreKit harness,尚需研发确认。
后续建议
- 下一步由研发先落一份“权益状态机 + 注入式 StoreKit 抽象”设计,再由 QA 依本方案补自动化脚本与发布证据模板。
- 若要压缩首版风险,优先保证:免费态、购买成功、恢复购买、老用户迁移、离线缓存、退款撤权;Family Sharing 先做到可识别 / 可恢复 / 有发布证据。