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),可按以下步骤解决:
验证沙箱账号有效性
错误请求指向苹果沙箱服务器,确认测试设备已登录有效的沙箱测试账号:- 退出App Store正式账号,进入
设置 > App Store > 沙箱账号登录 - 若账号存在权限问题,在App Store Connect中创建新的沙箱测试账号重试
- 退出App Store正式账号,进入
检查内购项目配置
errorCode=500317通常关联收据生成失败,需确认:- App Store Connect中已创建对应内购项目,且状态为「准备提交」或「已批准」
- 内购项目的Bundle ID与App的Bundle ID完全匹配
修复401未授权问题
401状态码表示请求未被授权,排查方向:- 确认App使用正确的开发/测试证书签名,避免签名无效导致的权限验证失败
- 切换设备网络(如从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
相关产品推荐
相关产品推荐

