agentsclimarketplace

Appstore revenuecat sync

Skill Xopoko/build-swift-apps/skills/appstore-revenuecat-sync

Swift-focused AI agent skills for iOS and macOS: build, debug, simulator, SwiftUI, Xcode, App Store workflows. Part of Plug'n Skills.

Install
npx -y skills add Xopoko/build-swift-apps --skill appstore-revenuecat-sync

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Reconcile App Store Connect subscriptions/IAPs with RevenueCat products, entitlements, offerings, and packages using `asc` plus RevenueCat MCP. Use for catalog bootstrap, drift audits, and deterministic product mapping.

SKILL.md

3.5 KB, as published. Nobody here has run it

App Store RevenueCat Sync

Start read-only, build a diff, then create/update only after explicit confirmation. Never delete resources in this workflow.

Preconditions

  • asc auth configured.
  • RevenueCat MCP configured/authenticated; write-enabled API v2 key for apply.
  • Known APP_ID, RevenueCat project_id, target app type (app_store or mac_app_store), and bundle ID for create flows.

Canonical key: ASC productId == RevenueCat store_identifier. Never use display names as unique IDs.

Modes

  • Audit: read ASC + RevenueCat, find missing resources and conflicts, present plan.
  • Apply: after approval, ensure ASC items, RevenueCat app/products, entitlements/attachments, offerings/packages, then verify.

Read Sources

asc subscriptions groups list --app "APP_ID" --paginate --output json
asc iap list --app "APP_ID" --paginate --output json
asc subscriptions list --group-id "GROUP_ID" --paginate --output json

RevenueCat MCP tools: mcp_RC_get_project, mcp_RC_list_apps, mcp_RC_list_products, mcp_RC_list_entitlements, mcp_RC_list_offerings, mcp_RC_list_packages with pagination.

Type mapping:

  • subscription -> subscription
  • CONSUMABLE -> consumable
  • NON_CONSUMABLE -> non_consumable
  • NON_RENEWING_SUBSCRIPTION -> non_renewing_subscription

Entitlement defaults: one per subscription group, one per non-consumable, none for consumables unless requested.

Apply Order

  1. Create missing ASC resources, then re-read ASC to get canonical IDs:
    asc subscriptions groups create --app "APP_ID" --reference-name "Premium"
    asc subscriptions create --group-id "GROUP_ID" --reference-name "Monthly" --product-id "com.example.premium.monthly" --subscription-period ONE_MONTH
    asc iap create --app "APP_ID" --type NON_CONSUMABLE --ref-name "Lifetime" --product-id "com.example.lifetime"
    
  2. Ensure RevenueCat app/products with mcp_RC_create_app and mcp_RC_create_product; set store_identifier to ASC productId.
  3. Ensure entitlements and product attachments with mcp_RC_create_entitlement, mcp_RC_attach_products_to_entitlement, and verify with mcp_RC_get_products_from_entitlement.
  4. Optional offerings/packages: mcp_RC_create_offering, mcp_RC_update_offering, mcp_RC_create_package, mcp_RC_attach_products_to_package using eligibility_criteria: "all".

Recommended package keys: weekly $rc_weekly, monthly $rc_monthly, two-month $rc_two_month, three-month $rc_three_month, six-month $rc_six_month, annual $rc_annual, lifetime $rc_lifetime, custom $rc_custom_<name>.

Agent Rules

  • Always audit first, even when the user asks to apply.
  • Ask before create/update operations.
  • Match by store_identifier first.
  • Use full pagination (--paginate, starting_after).
  • Continue after per-item failures and report all together.
  • RevenueCat MCP does not create ASC products; use asc for ASC resources first.
  • Watch for wrong RevenueCat project/app, wrong platform app, consumables attached to entitlements, skipped ASC re-read, and unverified package/offering attachments.

Output

Summarize ASC created/skipped/failed counts, RevenueCat created/skipped/failed counts, attachment counts, and actionable failures.

References: examples.md, references.md.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.