Capacitor打包SvelteKit iOS应用:cordova-plugin-purchase初始化失败排查
Cordova-Purchase 在 Capacitor + SvelteKit iOS 环境下无 Ready 状态触发的解决方案
先排查这些遗漏的配置
开发者账号与 App Store Connect 配置
- 确认你的 Apple 开发者账号已完成协议、税务、银行信息的签署——哪怕产品状态是
Ready to Submit,如果这些协议没搞定,沙盒环境根本拉取不到产品数据。 - 检查 Capacitor 配置文件(
capacitor.config.ts/.js)里的appId和 App Store Connect 中的 Bundle ID 完全一致,大小写、标点符号都不能错。 - 打开 Xcode 项目(
npx cap open ios),在Signing & Capabilities中确认已添加In-App Purchase能力,并且选择了正确的开发者团队。
- 确认你的 Apple 开发者账号已完成协议、税务、银行信息的签署——哪怕产品状态是
插件初始化时机错误
SvelteKit 的 SSR/SSG 特性导致原生插件加载时机和纯前端项目不同,必须等 Capacitor 完全初始化后再启动购买插件:import { Capacitor } from '@capacitor/core'; import { browser } from '$app/environment'; if (browser && Capacitor.isNativePlatform()) { document.addEventListener('capacitorAppReady', () => { // 初始化插件,自动续期订阅需要填appSharedSecret,普通内购可留空但建议加上 window.store.initialize({ storekit: { appSharedSecret: '你的App共享密钥' } }); // 绑定监听器 window.store.ready(() => { console.log('Store 就绪,加载产品'); window.store.load(['你的产品ID1', '你的产品ID2']); }); window.store.error(err => { console.error('Store 错误:', err); }); }); }别直接在组件
onMount里初始化——此时原生插件可能还没完成加载。产品ID完全匹配
代码中store.load()传入的产品ID必须和 App Store Connect 里的完全一致,包括大小写、前缀(比如com.yourapp.pro不能写成com.yourapp.Pro)。
调试步骤
用Xcode看原生日志
- 用
npx cap open ios打开Xcode,连接真机(模拟器内购不稳定,优先用真机)。 - 运行项目后查看Xcode控制台,插件会输出原生层面的详细日志——比如是否连接沙盒失败、产品拉取报错等,这些是前端日志看不到的。
- 用
沙盒账号验证
- 在iOS设备上退出当前App Store账号(设置→App Store→退出),触发内购时会弹出沙盒账号登录框,用你在App Store Connect创建的沙盒测试账号登录。
- 确认产品状态是
Ready to Submit或Approved,Waiting for Review的产品无法在沙盒中访问。
兼容性检查
确保cordova-plugin-purchase版本和当前Capacitor版本兼容,尝试更新插件:npm update cordova-plugin-purchase npx cap sync ios隔离SvelteKit服务端环境
购买逻辑必须只在客户端执行,用$app/environment的browser变量确保代码不会在服务端运行,避免初始化失败。
内容的提问来源于stack exchange,提问作者nicholas
相关产品推荐
相关产品推荐

