You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用StoreKit 2测试macOS应用IAP时模拟购买无响应问题求助

StoreKit 2本地模拟购买无响应解决方案

问题根因

该问题是Xcode 13 Beta 5与macOS Monterey Beta 8搭配使用时的已知兼容性问题,本地.storekit配置绑定后,仅商品查询接口可正常返回,购买接口会出现永久挂起无回调的情况。

优先排查项

确认项目的Signing & Capabilities配置中已经添加了In-App Purchase能力,缺失该权限也可能导致购买流程无响应。

可行修复方案

  • 方案1:升级开发环境(优先推荐)

    直接升级到Xcode 13正式版及后续稳定版本,同时将macOS系统升级到Monterey正式版,该版本组合已官方修复了本地StoreKit配置的购买挂起问题,升级后原有代码无需修改即可正常走通模拟购买流程。
  • 方案2:临时替代测试方案(暂不升级环境时使用)

    1. 改用沙盒环境测试:放弃本地.storekit配置,在Apple开发者后台完成IAP商品配置后,在macOS系统偏好设置中登录沙盒测试账号,直接走线上沙盒环境测试购买流程,可正常获得回调。
    2. 改用iOS模拟器测试:同版本Xcode下iOS 15 Beta版本的模拟器不存在该Bug,你可以将应用适配到iOS端后在iOS模拟器上使用本地.storekit配置完成购买逻辑测试。
  • 代码补充优化

    你可以给购买逻辑添加超时判断,避免测试过程中出现流程永久卡死的情况,参考实现代码如下:
    func purchase(product: Product) async throws -> Product.PurchaseResult {
        print("Purchasing \(product.id) ...")
        return try await withThrowingTaskGroup(of: Product.PurchaseResult.self) { group in
            // 发起购买请求
            group.addTask {
                return try await product.purchase()
            }
            // 添加超时逻辑
            group.addTask {
                try await Task.sleep(nanoseconds: 30 * 1_000_000_000) // 超时时间30秒,可自行调整
                throw NSError(domain: "IAPTest", code: -1, userInfo: [NSLocalizedDescriptionKey: "购买流程超时"])
            }
            // 取最先返回的结果
            guard let result = try await group.next() else {
                group.cancelAll()
                throw NSError(domain: "IAPTest", code: -2, userInfo: [NSLocalizedDescriptionKey: "未知错误"])
            }
            group.cancelAll()
            return result
        }
    }
    

内容的提问来源于stack exchange,提问作者Lukas Würzburger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:57:04