Fix: RevenueCat Products Could Not Be Fetched
RevenueCat says none of your products could be fetched from App Store Connect. The real fix is not your app build, it is your Apple banking and tax setup.

You wired up RevenueCat, added your products, and opened your paywall. Instead of prices, you got this:
There is an issue with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect.
The instinct is to assume something is broken inside the app, that native purchasing was never compiled in, that you need a different kind of build. That is the wrong direction, and if you follow it you will spend a weekend rebuilding something that was already correct. The actual cause sits inside your Apple account, and the fix takes about ten minutes plus a wait.
What the error actually means
This message is not a crash and it is not a missing library. It only appears at one specific point: after RevenueCat has loaded, connected to the store, and asked Apple for your product list. Apple answered, and the answer was empty.
Read that again, because it is the whole point. To reach this error at all, the purchasing layer has to be present and running. If it were missing, you would not get a product-fetch failure, you would get an initialization failure much earlier, or nothing at all. So the error is proof that the native side works. What failed is the store handing back product data.
Why you don't need a native build
If you built with an AI tool like Lovable or Base44, there is a good chance it told you the app can't do native purchases in a web container and that you need to switch to a fully native build to make StoreKit reachable. That advice is wrong, and it is wrong in a way that costs people days.
Despia already includes RevenueCat as a native package in your build, and StoreKit ships inside that package. It is compiled into your current binary. There is nothing to switch to and nothing to reach for, because it is already there. The empty product list is not StoreKit being absent, it is the store returning nothing to a StoreKit request that fired correctly.
AI builders trip on this because they reason from the file scaffolding they generated, not from what actually shipped in the binary. The error text mentions configuration and fetching, so the model invents a configuration or fetching problem in the code. The problem is upstream of the code entirely.
The real cause: Apple hasn't approved your paid apps setup
Apple will not return a single product to your app until the commercial side of your developer account is complete and approved. This is the part almost everyone misses, because it lives in a section of App Store Connect you only touch once.
Three things have to be done and approved:
The Paid Applications Agreement has to be signed and active.
Your banking details have to be entered.
Your tax forms have to be submitted.
Until all three are in place and Apple has processed them, every product request comes back empty. That is the exact behaviour you are seeing. Your products are fine, your IDs are fine, your keys are fine. Apple is simply refusing to sell anything through an account that cannot yet be paid.
Fix it step by step
Go to appstoreconnect.apple.com and sign in with your Apple developer account.
Open the section called Agreements, Tax, and Banking.
Find the Paid Applications Agreement and accept it if it is not already active.
In the banking section, add your bank account details.
In the tax section, fill in and submit your tax forms.
Once all three parts show as complete, wait one to two days for Apple to approve them.
There is no rebuild involved. When Apple flips the account to active, your existing app starts loading products on its own the next time it asks. You do not touch Despia, you do not touch your code, you do not ship a new version.
The TestFlight trap
This one catches people who assume testing is exempt. It is not. Apple blocks purchases, including sandbox and TestFlight purchases, until the paid apps setup is approved. So you can be fully into TestFlight, installed on a real device, signed into a sandbox account, and still see the empty paywall, purely because banking and tax have not cleared yet.
If you are testing and products refuse to load, do not assume your test setup is broken. Check the account approval first. It is the more likely culprit by a wide margin.
Rule out the quick stuff first
The banking and tax approval is the cause people miss, but before you settle on it, confirm the fast checks so you are not waiting on Apple for nothing:
Product IDs match exactly between RevenueCat and App Store Connect. They are case sensitive, and a trailing space counts.
You are using live RevenueCat API keys, not test keys. Test keys will crash a Despia app on launch, so if the app opens at all, this is not your issue, but it is worth knowing.
The iOS key in Despia starts with
appl_and sits in the iOS field. The Android key starts withgoog_and sits in the Android field.If you changed or added a key after your last build, you rebuilt. Keys are compiled in at build time, so an old build carries old keys.
If all of those are clean and you are still seeing the empty product list, the answer is the account approval, and the answer is patience.
Checklist
Product IDs match exactly in RevenueCat and App Store Connect, case for case
Using live RevenueCat keys, iOS
appl_in the iOS field, Androidgoog_in the Android fieldRebuilt if any key changed since the last build
Paid Applications Agreement signed and active
Bank account entered in App Store Connect
Tax forms submitted in App Store Connect
Waited one to two days for Apple to approve the paid apps setup
Confirmed on a real device, not a simulator
Ship purchases without rebuilding native
Your Despia app already ships with native in-app purchases through RevenueCat, in the one web codebase you built. When products won't load, the fix is almost always on Apple's side, not yours.






