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

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"])
        }
    }
    

代码优化建议

  1. 在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)")
        }
    }
    
  2. 单例命名建议修正为standard(原代码拼写为standart),避免后续维护混淆。

最终测试流程

  1. 回到App Store Connect,补全内购项目的所有必填元数据,确认状态更新为「Ready to Submit」。
  2. 重启Xcode,清理项目缓存(Cmd+Shift+K),重新编译安装到测试设备。
  3. 确保设备登录沙盒账号,且未登录个人App Store账号。
  4. 运行应用,查看控制台是否还输出无效ID提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:19:55