Developer Tools 进阶 20m
StoreKit 测试的新功能
What's new in StoreKit testing
2022年6月6日
一句话判断
Xcode 14 的 StoreKit Testing 终于支持与 App Store Connect 同步内购产品数据,配合全新的 Transaction Inspector,调试订阅和内购从未如此顺畅。
这场 Session 讲了什么
这场 Session 聚焦 Xcode 14 中 StoreKit Testing 的三项重大更新。第一,StoreKit Configuration File 现在可以直接从 App Store Connect 同步内购产品元数据,不再需要手动维护两份数据。第二,SwiftUI Preview 可以直接加载 StoreKit 配置文件中的产品信息,无需运行 App 就能预览商店界面。第三,Transaction Manager 新增了 Transaction Inspector,可以可视化查看每笔交易的完整生命周期信息,包括订阅过期时间、续订状态等。
Session 还深入介绍了订阅测试的高级场景:如何测试订阅优惠(Offer)、订阅重新开通(Repurchase)、以及跨订阅组的升级降级行为。最后介绍了 Sandbox 环境的改进,包括更灵活的测试账号管理。
值得深挖的点
- Synced StoreKit Configuration:在 Xcode 14 中创建配置文件时勾选同步选项,产品数据会自动从 App Store Connect 拉取。修改在 ASC 中完成后再同步回 Xcode。虽然同步文件是只读的,但可以一键转为本地可编辑版本。
- Transaction Inspector:在 Transaction Manager 中选中任意交易,右侧面板会展示详细信息,包括订阅过期日期、即将续订的信息、所属订阅组等。还可以直接跳转到对应的配置文件条目。
- SwiftUI Preview 集成:这意味着你可以在 Xcode Preview 中直接看到真实的商品标题、描述和价格,而不是占位文本。对商店 UI 的开发效率提升非常明显。
- 订阅测试的边界场景:Session 演示了如何测试 introductory offer、promotional offer 的应用条件,以及如何模拟订阅从过期到重新购买的各种状态转换。
代码片段
// SwiftUI Preview 中直接使用 StoreKit 产品数据
struct ProductView: View {
let product: Product
var body: some View {
VStack {
Text(product.displayName)
Text(product.description) // 来自 App Store Connect 的真实描述
.font(.subheadline)
Text(product.displayPrice)
}
}
}
// 在 Xcode 14 中,Preview 自动加载 StoreKit 配置
// 无需额外代码,Product.products(for:) 在 Preview 中也能正常工作
最佳实践
- 使用同步的 StoreKit Configuration File 作为日常开发的主力配置,只在需要临时修改时才转为本地文件
- 利用 Transaction Inspector 的过滤功能,按产品 ID 或购买日期筛选交易,快速定位问题
- 在 Scheme Editor 的 Run 选项中切换 StoreKit 环境和 Sandbox 环境,确保两套环境测试一致
- 对订阅类 App,完整测试 introductory offer 和 promotional offer 的各种场景
- Transaction Manager 中可以右键交易进行退款测试,别忘了验证你的退款处理逻辑
还有什么值得关注
- “Implement proactive in-app purchase restore” 讲解了如何主动恢复购买
- “Support customers and manage refunds” 覆盖了退款处理的最佳实践
- App Store Server API 和 App Store Server Notifications V2 是后端验证交易的关键技术
- 如果你在做自动续期订阅,“Manage in-app subscriptions on your server” 值得一看
WWDC 2022