RevenueCat is wired up, but the subscription is missing from your App Store version
You installed react-native-purchases, set your API key, defined offerings, and the paywall works in TestFlight. Then Apple rejects the build: they could not find or purchase the subscription. The wiring in your repository was never the problem — the product simply was not attached to the version under review in App Store Connect, and no amount of code can prove that it is.
Two different systems
RevenueCat sits between your app and Apple. Your repository holds the SDK, the API key, and your offering configuration — everything RevenueCat needs at runtime. But whether a specific in-app purchase is submitted with a specific app version is state that lives only in App Store Connect. RevenueCat's own launch checklist and its products and entitlements docs walk through configuring products in App Store Connect first; the SDK reads that state, it does not create it.
Why Apple rejects it
A brand-new in-app purchase has to be submitted alongside a new app version: you select it on the version page in App Store Connect before you submit. If you do not, the reviewer's build has no purchase to exercise, so it reads as a non-functional or missing purchase and is rejected under app-completeness rules. Apple documents the submission flow in the App Store Connect Help and the completeness rule in Review Guideline 2.1. A purchase can sit in the "Ready to Submit" state and still not be attached to the build — the two are independent.
Why a repository check can only warn, never clear it
A static scan of your project can confirm the honest half: the purchase SDK is present, and if you keep a local metadata export it can check that a product is declared. What it cannot do is read your App Store Connect account to confirm the product is attached to this version — that would require signing in to Apple, which a local, network-free preflight will not do. So the correct output is not a pass and not a blocker: it is needs confirmation. The tool tells you exactly what to verify by hand and leaves the claim to you.
What to check before you submit
- Open the version in App Store Connect and confirm the subscription or product is listed under In-App Purchases and Subscriptions for that version.
- Confirm the product's own state is at least "Ready to Submit", and that its identifier matches the one your RevenueCat offering references.
- Test a real sandbox purchase and restore against the build you are submitting, not an older one.
The App Store Preflight Kit detects a purchase SDK, checks any committed store metadata, and — because it will not read your App Store Connect account — marks the attachment as needing confirmation with the exact step to verify. Checkout is closed during cross-agent validation; see what the skill pack checks and the planned offer.