From RevenueCat
Diagnoses and resolves RevenueCat integration issues in iOS, Android, Web apps by auditing projects, products, entitlements, offerings, webhooks, and applying fixes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/RevenueCat:revenuecat-troubleshootThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Diagnose and resolve common RevenueCat integration issues.
Diagnose and resolve common RevenueCat integration issues.
Important: The API key may have access to multiple projects. Always use the list-projects tool of the RevenueCat MCP first. If multiple projects are returned, ask the user which project to troubleshoot.
Ask targeted questions:
Work through this checklist:
`list-projects` → ask user to select project if multiple
`list-apps` (with selected project_id)
list-products
product_id:base_plan_id formatlist-entitlements
get-products-from-entitlement (for each entitlement)
list-offerings
list-packages
is_current: truelist-webhook-integrations
Diagnostic Report
=================
Project: {project_name}
Checks Passed: ✅
- Project exists and is accessible
- 2 apps configured (iOS, Android)
- 4 products found
Issues Found: ⚠️
1. CRITICAL: Product not attached to entitlement
Product: annual_premium (prod123)
Fix: Attach this product to an entitlement
2. WARNING: Offering has empty package
Offering: default / Package: $rc_annual has no products
Fix: Attach annual_premium to this package
3. INFO: No webhook configured
Optional but recommended for server-side access control
Recommended Actions:
1. Attach annual_premium to "premium" entitlement
2. Attach annual_premium to $rc_annual package
Would you like me to fix issues #1 and #2 now?
For each fixable issue, confirm with the user then execute:
mcp_RC_attach_products_to_entitlement
mcp_RC_attach_products_to_package
| Error Code | Likely Cause | Solution |
|---|---|---|
INVALID_APP_USER_ID | Reserved characters or empty string | Use alphanumeric IDs, underscores, hyphens only |
INVALID_CREDENTIALS | Wrong API key or bundle ID mismatch | Verify API key matches app |
NETWORK_ERROR | No connectivity or firewall | Check network, verify RevenueCat domains allowed |
STORE_PROBLEM | Store downtime, config issue, iOS 18.x bug | Check store status, verify config, see Known iOS Issues below |
SIGNATURE_VERIFICATION_FAILED | Tampered receipt or config error | Verify In-App Purchase Key (iOS) or service credentials |
| Error Code | Solution |
|---|---|
RECEIPT_ALREADY_IN_USE | Call restorePurchases() or sync customer |
PRODUCT_NOT_AVAILABLE_FOR_PURCHASE | Verify product status in App Store Connect/Play Console |
PURCHASE_NOT_ALLOWED | Check parental controls, payment method |
PRODUCT_ALREADY_PURCHASED | Call restorePurchases() to sync |
Ask the developer to enable debug logging:
Purchases.logLevel = .debugPurchases.logLevel = LogLevel.DEBUGLog emoji indicators: 🍎 Apple/StoreKit · 🤖 Google Play · 📦 Amazon · 😿 RevenueCat backend
iOS 18.0–18.3.2: StoreKit Daemon Connection Failure
STORE_PROBLEM (NSCocoaErrorDomain Code 4097) on ~25% of purchases on physical devicesiOS 18.4–18.5 Simulator: Products Don't Load
ProxyBillingActivity NullPointerException
NoCoreLibraryDesugaringException / NoClassDefFoundError
product_id:base_plan_id format"Issues fetching products" — Products must be submitted for review with the app on first submission. Create products in App Store Connect, then submit app and products together.
"Error during purchase" (Sandbox) — Apple sandbox downtime. Inform reviewer, provide RevenueCat sandbox dashboard screenshot showing test purchases work, ask to retry.
"Content not unlocked after purchase" — Verify product → entitlement connection in RevenueCat. Ensure app calls getCustomerInfo() after purchase.
User purchased but has no entitlement — Check product → entitlement attachment and verify store identifier matches exactly.
Offering returns empty — Verify a current offering exists, packages have products attached, and products exist in the app's store.
Webhook not receiving events — Verify URL is internet-accessible and returns 200 OK. Test with webhook.site.
Subscription status out of sync — SDK caches CustomerInfo for 5 min (foreground). Force refresh:
// iOS
Purchases.shared.getCustomerInfo(fetchPolicy: .fetchCurrent) { ... }
// Android
Purchases.sharedInstance.getCustomerInfoWith(CacheFetchPolicy.FETCH_CURRENT) { ... }
SDK crashes on launch (iOS/Xcode 26) — Initialize RevenueCat before other networking libraries.
SDK crashes on launch (Android) — Enable core library desugaring or raise minSdk to 24+.
npx claudepluginhub revenuecat/ai-toolkit --plugin RevenueCatGuides reception of code review feedback: verify before implementing, avoid performative agreement, push back with technical reasoning when needed.
Design banners for social media, ads, website heroes, and print with multiple art direction options and AI-generated visuals.