I’ve implemented the RevenueCat SDK and tested the entire purchase journey using the TestFlight version of the app. Everything worked smoothly on iPhone (tested with different iPhones).
However, my app was rejected, and upon reviewing the feedback and attached screenshot, I noticed the reviewers tested it on an iPad. I then tested the same TestFlight build on two iPads — both returned an error when calling getOfferings. The same code works correctly on iPhone but consistently falls into the catch block (at `….Purchases.getOfferings()) on iPad.
SDK version: "@revenuecat/purchases-capacitor": "^9.2.1"
Since it works on iPhone, we’re confident that the product identifiers and configurations are correct.
We only test on real devices. StoreKit testing is not implemented, so simulator support is not expected and not needed.
Tested devices:
-
iPad (9th generation) – iPadOS 18.4.1
-
iPad (10th generation) – iPadOS 18.4.1
App Review test environment:
-
iPad Air (5th generation) – iPadOS 18.4.1
In App Store Connect, the subscription products are currently marked as “Waiting for Review.” Since they work on iPhone via TestFlight, we assume this status does not block test access.
Note: The purchase flow works on iPhones in all cases — whether Developer Mode is enabled or disabled, and whether using a sandbox Apple ID or a regular Apple account. It consistently works across these scenarios. The issue only occurs on iPads.
Build device family includes iPhone and iPad (otherwise it would not be opened on iPad at all).
I also tried using `..getProducts` instead of offerings to retrieve the products for specific productIds but no luck. I want to keep the offerings approach as officially recommended.
I’m happy to provide additional details if needed.
static async getAvailablePackages(): Promise<PurchasesPackage[]> {
if (!this.ensureInitialized()) return [];
try {
const offerings = await Purchases.getOfferings();
if (!offerings.current) {
console.warn('[RevenueCat] No current offering found');
return [];
}
const packages = offerings.current.availablePackages;
if (packages.length === 0) {
console.warn('[RevenueCat] Current offering has no available packages');
}
return packages;
} catch (err) {
console.error('[RevenueCat] Failed to fetch available packages:', err);
return [];
}
}
the error
{"code":"23","message":"There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). \nMore information: https://rev.cat/why-are-offerings-empty","errorMessage":"There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). \nMore information: https://rev.cat/why-are-offerings-empty"}