SwiftUI应用内购出现Invalid Product Identifiers错误求助
解决SwiftUI非消耗型内购「Invalid Product Identifiers found」问题
核心排查步骤
- 修复内购项目状态:你的内购项目显示「Missing Metadata」是关键问题。Apple要求内购项目必须完成所有必填资料(包括至少一种语言的名称/描述、价格层级设置),状态变为「Ready to Submit」或「Waiting for Review」后,才能在测试环境中被获取到。即使不提交审核,只要状态不是缺失元数据,沙盒环境就能识别产品ID。
- 验证Bundle ID一致性:确认Xcode Target中的
Bundle Identifier与App Store Connect中应用的Bundle ID完全一致,包括大小写和前缀(比如com.yourteam.ProTimer)。 - 使用沙盒测试账号:
- 必须在App Store Connect的「用户和访问」→「沙盒」中创建专门的测试账号,禁止使用个人Apple ID测试。
- 在测试设备的「设置」→「App Store」中退出个人账号,登录沙盒账号后再运行应用。
- 检查网络环境:确保测试设备能正常连接苹果的沙盒服务器,国内环境需避免屏蔽相关域名(如
buy.itunes.apple.com)。 - 调整产品加载时机:你在
App的init中调用loadProducts可能过早,建议将加载逻辑移到ContentView的onAppear中,确保框架初始化完成后再请求产品:struct ContentView: View { var body: some View { // 你的视图内容 } .onAppear { StoreManager.standart.loadProducts(with: ["你的产品ID"]) } }
代码优化建议
- 在
productsRequest方法中,添加产品前先清空数组,避免重复加载:func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { DispatchQueue.main.async { self.products.removeAll() // 新增这行 self.products.append(contentsOf: response.products) } for invalidIdentifier in response.invalidProductIdentifiers { print("Invalid identifiers found: \(invalidIdentifier)") } } - 单例命名建议修正为
standard(原代码拼写为standart),避免后续维护混淆。
最终测试流程
- 回到App Store Connect,补全内购项目的所有必填元数据,确认状态更新为「Ready to Submit」。
- 重启Xcode,清理项目缓存(
Cmd+Shift+K),重新编译安装到测试设备。 - 确保设备登录沙盒账号,且未登录个人App Store账号。
- 运行应用,查看控制台是否还输出无效ID提示。
内容的提问来源于stack exchange,提问作者SwiftUICodingGermany
相关产品推荐
相关产品推荐

