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

iOS 17中调用AppTransaction.shared失败问题求助

iOS 17调用AppTransaction.shared抛出权限类错误的排查方案

问题重现

在iOS 17系统中调用AppTransaction.shared时,代码未执行到后续日志输出,直接抛出错误。相关代码如下:

let result: VerificationResult<AppTransaction> = try await AppTransaction.shared
        
NSLog("Result \(result)")

抛出的错误日志:

Error getting app transaction: Error Domain=ASDErrorDomain Code=500 "(null)"   UserInfo={NSUnderlyingError=0x281815050 {Error Domain=AMSErrorDomain Code=301 "Invalid    Status Code" UserInfo={NSLocalizedDescription=Invalid Status Code, AMSURL=https://mzstorekit-sb.itunes.apple.com/inApps/v1/receipts/createAppReceipt?REDACTED, AMSStatusCode=401, AMSServerPayload={
errorCode = 500317;
}, NSLocalizedFailureReason=The response has an invalid status code}}}
 Received error that does not have a corresponding StoreKit Error:
 Error Domain=AMSErrorDomain Code=301 "Invalid Status Code" UserInfo= {NSLocalizedDescription=Invalid Status Code, AMSURL=https://mzstorekit-   sb.itunes.apple.com/inApps/v1/receipts/createAppReceipt?REDACTED, AMSStatusCode=401,  AMSServerPayload={
errorCode = 500317;
}, NSLocalizedFailureReason=The response has an invalid status code}
Received error that does not have a corresponding StoreKit Error:
Error Domain=ASDErrorDomain Code=500 "(null)" UserInfo=.{NSUnderlyingError=0x281815050 {Error Domain=AMSErrorDomain Code=301 "Invalid Status Code" UserInfo={NSLocalizedDescription=Invalid Status Code, AMSURL=https://mzstorekit-sb.itunes.apple.com/inApps/v1/receipts/createAppReceipt?REDACTED, AMSStatusCode=401, AMSServerPayload={
errorCode = 500317;
}, NSLocalizedFailureReason=The response has an invalid status code}}}

排查与解决方案

从错误信息来看,核心问题是沙箱环境请求401未授权以及收据创建失败(errorCode=500317),可按以下步骤解决:

  • 验证沙箱账号有效性
    错误请求指向苹果沙箱服务器,确认测试设备已登录有效的沙箱测试账号:

    1. 退出App Store正式账号,进入设置 > App Store > 沙箱账号登录
    2. 若账号存在权限问题,在App Store Connect中创建新的沙箱测试账号重试
  • 检查内购项目配置
    errorCode=500317通常关联收据生成失败,需确认:

    1. App Store Connect中已创建对应内购项目,且状态为「准备提交」或「已批准」
    2. 内购项目的Bundle ID与App的Bundle ID完全匹配
  • 修复401未授权问题
    401状态码表示请求未被授权,排查方向:

    1. 确认App使用正确的开发/测试证书签名,避免签名无效导致的权限验证失败
    2. 切换设备网络(如从Wi-Fi切换到蜂窝数据),排除网络代理或防火墙拦截苹果服务器请求
  • 增强错误处理逻辑
    在代码中添加明确的错误捕获,便于定位问题:

    do {
        let result: VerificationResult<AppTransaction> = try await AppTransaction.shared
        NSLog("Result \(result)")
    } catch let error as NSError {
        NSLog("AppTransaction error: \(error.domain) Code:\(error.code) UserInfo:\(error.userInfo)")
        // 根据错误类型做针对性处理
        if error.code == 301, let underlyingError = error.userInfo[NSUnderlyingErrorKey] as? NSError {
            NSLog("Underlying error: \(underlyingError)")
        }
    }
    

内容的提问来源于stack exchange,提问作者Deepak Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:18:17