edit | blame | history | raw

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 先做到可识别 / 可恢复 / 有发布证据。