RevenueCat iOS 订阅怎么本地测试?2026 远程 Mac 流程
📋 本文目录
症状:订阅页能打开,却不确定购买是否真的解锁了权益。
最快解法:先用 RevenueCat Test Store 验证应用逻辑,再用 Xcode StoreKit 配置测试本地交易流程,发布前切到 Apple Sandbox 验收平台链路;三者不能互相替代。
刚接入 RevenueCat、要验证订阅页和权益解锁的 iOS 独立开发者,先看环境边界与测试顺序。
想用模拟器复现 Apple 购买流程,重点看 StoreKit 配置步骤;没有本地 Mac、需要远程构建和测试的小团队,重点看末尾的环境复验与凭据隔离。
开测前:按验收目标选择环境
不要把三种环境都当成“模拟购买”。Test Store 主要验证应用侧购买逻辑和权益状态;StoreKit 配置让你在 Xcode 中用本地数据测试 StoreKit 行为;Apple Sandbox 则使用 App Store Connect 中的商品和测试账号,验证平台交易。RevenueCat 对 Test Store 能力的说明以及 Apple 对不同开发阶段测试环境的说明,都划分了这些环境的用途。
| 环境 | 主要验收目标 | 商品与交易来源 | 判断边界 | 适用度评分 |
|---|---|---|---|---|
| RevenueCat Test Store | SDK 接入、购买结果处理、CustomerInfo 与 entitlement | RevenueCat 测试商品与模拟结果 | 不验证 Apple 平台交易行为 | 应用逻辑:高;平台验收:低 |
| Xcode StoreKit 配置 | 本地 StoreKit 交易、界面与状态处理 | Xcode 配置文件中的本地商品 | 本地测试交易不是 App Store 签名交易 | 本地流程:高;平台后台:低 |
| Apple Sandbox | App Store Connect 商品、平台测试交易与权益链路 | Apple Sandbox 测试账号和平台商品 | 测试环境不等于正式生产购买 | 平台验收:高 |
评分只表示该环境对相应验收目标的覆盖程度,不代表测试质量或结果保证。Apple 说明,本地 StoreKit 测试数据由 Xcode 环境提供;Sandbox 则能提供由 App Store 签名的交易数据。发布前若涉及平台交易,不能只凭前两种环境的通过记录放行。
配置阶段:先对齐商品、用户与密钥
先在 RevenueCat 项目中建好产品与 entitlement 关系,再把应用中的商品标识和 Offering 对齐。RevenueCat 产品标识必须与当前测试路径使用的商品标识对应;否则,界面拿到的商品、购买后的 CustomerInfo 和你检查的权益可能并非同一配置。关于 iOS 商品与 App Store Connect 的对应关系,可对照 RevenueCat 的 iOS 产品配置文档。
首次运行前按顺序检查:
- 确认 Xcode Target 的 Bundle ID 对应当前 RevenueCat 应用配置,不要拿另一个环境的构建去查当前项目。
- 对照产品标识、订阅组、Offering 和 entitlement;测试账号应当能触发你准备验证的权益。
- 检查 SDK 初始化时使用的 App User ID。若你使用匿名用户,记录当次测试对应的用户标识,避免在控制台检查错人。
- 按用途分开管理密钥。RevenueCat SDK 使用应用对应的公开 API Key;服务端 API 使用的密钥不要写进客户端,也不要提交到仓库。初始化与密钥用途可参照RevenueCat SDK 配置文档。
- 把 Test Store Key 与正式构建配置隔离。开发构建和发布构建使用不同配置;不要将 Test Store Key 带入正式构建。
本地记录可以用占位符,不要在日志、截图或文章示例里贴真实项目凭据:
| 检查项 | Debug / 本地测试 | 发布前核对 |
|---|---|---|
| SDK Key | <test_store_api_key> 或对应测试环境的公开 Key |
对应平台的公开 API Key |
| 服务端凭据 | 不放入客户端 | 仅按服务端安全配置管理 |
| App User ID | 记录测试用户或匿名用户标识 | 确认测试与生产身份策略一致 |
| 产品标识 | 与当前 Test Store 或 StoreKit 配置一致 | 与 App Store Connect 商品配置核对 |
首次购买:用 Test Store 验证应用逻辑
第一次测试先选 Test Store,目的是尽快排除应用侧问题,而不是模拟 Apple 的全部购买行为。配置好测试商品、Offering 和测试 Key 后,你可以分别触发成功、取消或失败结果,并检查界面是否给出正确反馈。
每次购买都记录三个结果:应用是否进入正确状态,CustomerInfo 是否更新,预期 entitlement 是否激活或保持关闭。再测试一次恢复或重新加载状态,确认权益判断不是只靠订阅页的本地按钮变化。RevenueCat 的 Test Store 使用说明指出,测试购买可以更新 CustomerInfo、触发 entitlement 并显示在控制台;但它不会替你验证 Apple Sandbox 的实际平台交易流程。
这里最容易踩的坑,是把“测试商品能买”当成“App Store 商品已完成配置”。Test Store 的商品可以用于应用逻辑测试;平台商品仍需在对应平台配置。切换环境时重新核对 API Key、商品标识和测试用户,不要只改一个 Key 就认为配置已切换完成。
本地复现:为 Xcode StoreKit 测试建立专用 Scheme
本地 StoreKit 配置适合反复复现交易流程,也适合在 App Store Connect 商品尚未准备好时开发。Apple 的设置 StoreKit Testing 文档说明,Xcode 可从本地 StoreKit 配置文件读取测试数据;这些本地商品不会因此自动成为 App Store Connect 商品。
按以下顺序落地:
- 在 Xcode 新建 StoreKit Configuration File,或使用已同步的配置文件。
- 在文件中建立本次测试需要的订阅商品,商品标识应与 RevenueCat 中配置的商品匹配。
- 复制当前 Scheme,命名为仅用于本地 StoreKit 测试的 Scheme,避免误改日常运行配置。
- 打开 Scheme 的 Run 选项,将 StoreKit Configuration 指向刚才的文件;其他 Scheme 保持不选该文件。
- 按 RevenueCat 的Apple 平台与本地 StoreKit 测试说明,检查 RevenueCat 商品配置和 StoreKit 测试证书设置。
- 从 Xcode 使用该 Scheme 启动应用,完成购买后检查 CustomerInfo、entitlement 与控制台记录。
StoreKit 配置中的商品信息与 RevenueCat 商品目录也要相互对应。不要只检查本地支付弹窗:如果 SDK 取到的是另一套 Offering,购买与权益结果就可能无法按预期关联。Apple 还指出,Xcode 本地环境生成的测试收据不是 App Store 签发的生产收据;本地验证通过不能替代平台验收。
环境选择与配置对应
| 测试阶段 | RevenueCat 商品配置 | Xcode / Apple 配置 | 通过后可以得出什么结论 |
|---|---|---|---|
| Test Store | 配置 Test Store 产品、Offering 和 entitlement | 使用 Test Store Key | 应用逻辑与权益更新路径可用 |
| 本地 StoreKit | 配置可匹配的 RevenueCat 产品 | 配置文件商品、专用 Scheme、测试证书 | 本地 StoreKit 流程可复现 |
| Apple Sandbox | 配置对应的 App Store 产品与 RevenueCat 关系 | App Store Connect 商品、Sandbox 测试账号 | 平台测试购买链路已按当前配置验收 |
这三行代表递进关系,不是从中任选一个就能覆盖所有目标。使用本地商品时,不应推断平台商品已创建或已可供 Sandbox 使用。
长尾问题快速核对
Test Store 的测试通过后,还需要检查哪些内容?
还要核对 Apple 平台商品和交易链路。Test Store 适合快速验证 SDK 和应用状态变化;Apple Sandbox 用于测试平台交易。前者通过不能证明 Sandbox 商品、测试账号或交易行为都正常。
平台商品尚未建立时,开发验证可以从哪里开始?
可以先用 Test Store 验证应用逻辑,也可以用本地 StoreKit 配置测试交易。若要测试 Apple Sandbox,就需要检查 App Store Connect 中的平台商品及对应测试账号。
本地 StoreKit 文件怎样与 RevenueCat 商品对应?
将配置文件中的商品标识与 RevenueCat 产品配置对齐,并把文件指定给专用 Scheme 的 Run 选项;再按 RevenueCat 文档核对 StoreKit 测试证书。不要把本地收据当作 Apple 平台签名交易。
远程模拟器的购买结果能覆盖哪些验收?
它可以用于应用逻辑测试和本地 StoreKit 测试,但你要确认实际启动路径加载了目标 Scheme。通过模拟器测试不等于实体设备或 Apple Sandbox 验收完成。
发布前:切换 Apple Sandbox 验收平台链路
当应用购买逻辑和本地 StoreKit 流程已经稳定,再切到 Apple Sandbox。它会使用 App Store Connect 中设置的商品和 Sandbox 测试账号;Apple 将其定位为测试平台内购交易的环境。可先看Apple Sandbox 测试概览。
发布前按验收目标逐项检查:
- 使用当前构建对应的平台公开 API Key,不要继续沿用 Test Store Key。
- 确认 App Store Connect 商品标识、RevenueCat 产品、Offering 和 entitlement 对应。
- 使用 Sandbox 测试账号完成购买,并核对应用状态与 RevenueCat CustomerInfo。
- 将购买流程结果与商品元数据分开验收:价格、名称和本地化展示应另外核对,不能因为权益解锁就判定展示信息准确。
- 根据实际发布目标决定是否需要实体设备复验。模拟器测试通过不应被表述成所有设备和交易场景均已验证。
Apple 的不同阶段测试对照区分了 Xcode 本地测试、Sandbox 与 TestFlight:它们提供的数据来源和验收能力不同。若发布链路还包含服务器通知或服务端校验,应将相应路径单独列入验收,而不是用本地模拟器购买结果代替。
远程 Mac:固定复现条件并保存证据
远程 Mac 可以承担 Xcode 构建和模拟器运行,但“构建成功”并不等于“购买链路已验收”。常见失误包括:远程构建拿错 Scheme、命令行启动时没有加载 StoreKit 配置、测试与发布 Key 混用,以及切换测试账号后仍查看旧用户的权益状态。
每次复验都固定同一提交、目标 Scheme、构建配置和测试账号标识。若通过 Xcode 图形界面启动模拟器,检查 Scheme 的 Run 选项是否指向目标配置;若使用命令行或 CI 启动,先确认该启动路径实际读取 StoreKit 配置。RevenueCat 的本地 StoreKit 测试说明也提醒,不同启动方式可能影响配置文件是否生效。
验收记录至少保存:提交版本、构建配置、Scheme 名称、测试环境、商品标识、脱敏后的 App User ID、购买结果、CustomerInfo 与 entitlement 检查结果。不要把公开 SDK Key 与服务端 Secret 混为一谈,也不要将任何可用凭据写入日志或共享截图。切换 Test Store、StoreKit 配置与 Sandbox 后,都重新确认当前 Key、商品和用户,避免把上一环境的结果算到这一轮。
若你当前用 Windows 或 Linux 写代码、再临时借用 Mac 做构建,环境切换、配置遗漏和设备可用性都可能让购买复验难以复现;自购 Mac 则更适合长期、稳定且需要本地外设的工作负载。若你只需阶段性运行 Xcode 和模拟器,MacDate 的远程 Mac 方案入口可作为与自购硬件并列的选择;挑选前先按目标测试确认所需环境,再比较Mac mini 价格与购买成本及计算节点方案。RevenueCat iOS 订阅测试的执行顺序不变:Test Store 验应用逻辑,本地 StoreKit 验本地交易,Apple Sandbox 验平台链路。