StoreKit|使用 StoreKit 配置文件进行订阅测试

了解如何使用 StoreKit 配置文件,在 Xcode 中测试 App 购买功能。

StoreKit|使用 StoreKit 配置文件进行订阅测试

StoreKit 配置文件是什么

StoreKit 配置文件(StoreKit Configuration File,扩展名为 .storekit)是 Xcode 提供的一种本地沙盒测试工具,用于在开发和调试阶段模拟 App 内购(In-App Purchase, IAP)和订阅等 StoreKit 相关功能,无需连接真实的 App Store 服务器。

  • 本地模拟 IAP 商品:你可以在配置文件中自定义虚拟的商品(如消耗型、非消耗型、订阅等)。
  • 测试购买流程:无需上架 App Store 或连接沙盒账号,即可在本地测试购买、恢复、订阅、过期、退款等流程。
  • 调试订阅状态变化:可以模拟订阅到期、续订、价格变动等场景。

一个 .storekit 文件通常包含:

  • 商品 ID(Product ID)
  • 商品类型(消耗型、非消耗型、订阅等)
  • 价格、币种
  • 订阅周期、试用期、优惠期等
  • 相关元数据

创建 StoreKit 配置文件

在 Xcode 中,点击 File -> New -> File from Template:

Sync this file with an app in App Store Connect

勾选后,可以选择一个在 App Store Connect 上已经注册的 App。

这样,Xcode 会自动从 App Store Connect 拉取该 App 下已创建的所有 IAP 商品(包括订阅、消耗型、非消耗型等),并同步到本地 StoreKit 配置文件。

这样在本地测试时,商品信息和线上环境保持一致,避免手动维护商品列表。

同步下来的 StoreKit 配置文件为只读文件,不可编辑。如果有必要,可以通过 Editor -> Convert to Local StoreKit Configuration 转换成本地可编辑文件。

设置 Xcode 使用 StoreKit 配置文件

在 Edit Schema 中,点击 Run -> Options -> StoreKit Configuration,然后选择要使用的配置文件即可:

如果此处选择 None,则默认连接到沙盒环境。

再次 Build 之后,App 会自动加载本地测试环境。

查看 StoreKit 交易记录

点击 Xcode 下方的 Manage Store Transactions 按钮,可以查看在开发环境中的交易记录:

在这个页面,可以操作退款、取消订阅等功能:

高级测试功能

测试用户退款场景(Refund requests)

SwiftUI 提供了一个 .refundRequestSheet() 修饰器,可以在 App 内直接弹出申请退款的窗口。

自动创建的退款页面

但这个功能并不常用,我并不想在 App 中提供退款功能。

测试优惠代码(Offer code)

通过使用 .offerCodeRedemption(isPresented:onCompletion:) 修饰器,可以打开一个优惠代码兑换页面(由系统创建)。

在本地测试环境,该窗口无需输入代码,可以直接选择任意订阅选项。并在弹出的支付窗口中,可以看到对应 Code 提供的优惠信息。

具体可以查看我在这篇文章中的讲解:

StoreKit2|结合 SwiftUI 构建订阅 功能界面
使用 StoreKit2 API StoreKit 1 最早在 iOS 3.0(2009年)中推出,但许多 API 基于 Objective-C 语言构建。随着 Swift 语言的完善与普及,以及 2019 年 SwiftUI 的推出,苹果意识到需要更易于使用的 StoreKit API。 因此,在 2021 年,StoreKit 2 与 Swift Concurrency 一同在 Swift 5.5 中发布。StoreKit 2 提供了更现代、更易用的 API,且完全用 Swift 语言编写,更适合与现代

Subscription Renewal Rate(测试订阅过期)

Subscription Renewal Rate(订阅续订速率)用于模拟订阅自动续期的速度,方便在本地快速测试订阅的生命周期和相关逻辑

可以在 .storekit 配置文件中,为某个订阅产品设置 Renewal Rate,比如“每 5 分钟续订一次”。这样在测试时,订阅会自动在 5 分钟后续订,方便观察和调试订阅状态变化。

Interrupted Purchases(模拟订阅中断)

用于模拟用户订阅中断的场景。例如,支付方式过期。

Ask to Bug(适用于孩子)

ASK-to-Buy 主要用在帮助家长管理孩子的应用内购买和订阅。