Apple App Store Rejections
RevenueCat Support can explain error messages, or help you troubleshoot reproducible issues, but don't have other ways of expediting the review process.
Your app is finally complete! π You're tracking subscriptions in Sandbox, your Testflight users love it, you've followed our Launch Checklist, and you're finally ready to launch your app to the world.
After a few days in review, you get the dreaded 'Rejected' message. Now what? Let's work through some common rejection reasons and the best way to get your app back on track.
Understanding the rejection reasonβ
According to Apple's App Review Center, over 40% of app rejections are for Guideline 2.1 β Performance: App Completeness - this means that something didn't work in your app during review. We can't help with those rejections, obviously.
If you're here, we'll assume that your app was rejected for some problem with purchases. There are three places in the purchase flow that cause the majority of App Store rejections we hear about:
- Issues fetching products
- Error during purchase
- Content not unlocked after purchase
Usually the reviewer will include a screenshot with the problem they encountered. This can be helpful for you to track down where to look for the problem in your app. Always try to reproduce the issue first in a local build or Testflight. RevenueCat will behave the same way in your environment and the reviewers, so if there's any problem with your integration it should be able to be reproduced.
Issues fetching productsβ
Often times, purchases will work fine in Sandbox and Testflight, but App Store Review will not be able to fetch products. It's important to ensure that you are submitting your in-app purchases with your app for review. If an app has not previously had in-app purchases approved on the App Store, an option to submit them will appear on the main app version page.
To see this option, you must first fill in all required metadata so that the status of any in-app purchases you intend to use is 'Ready to Submit'.
If you've already released a version of your app containing in-app purchases, you can create new products in App Store Connect without having to release an update to your app. You'll have to submit new products for review independently of a new app version, and they must be in the 'Approved' state before they'll be available for purchase.
If you're having trouble fetching products in Testflight or a local build, see our community article on the most common reasons this occurs.
Re-submit for review If you're able to test purchases on your device successfully but App Review runs into issues fetching products, it's likely an issue with their environment. There isn't much you can do in these cases- some users have had to re-submit the same build up to a dozen times before being approved.
Error during purchaseβ
If an error occurs during the purchase process, it will be one of the errors outlined in our Error Handling guide here. Understanding what error triggered the rejection is the only way to make sure the issue gets resolved.
If the reviewer provides a screenshot of an error popup - use that to help track down the issue. RevenueCat itself will never display a user-facing popup or error message, so look through your app to find the code that triggered the alert and work backwards to determine the error message.
"Cannot connect to iTunes Store"β
This is actually the generic error message Apple uses for all SKErrors and not an error message from RevenueCat. See our guide on Error Handling for more info.
STORE_PROBLEM - "There was a problem with the App Store"β
This is the most common error from RevenueCat that can lead to unexplained App Store rejections. Unfortunately, this error occurs when Apple's sandbox environment is down and unable to verify purchases. The best course of action here is usually to re-submit your binary or try to explain the situation to the reviewer.
There are momentary outages in sandbox from time-to-time, but occasionally outages can last for days at a time. We'll do our best to flag major outages on our status page at status.revenuecat.com.
Content not unlocked after purchaseβ
Your app could also get rejected even if there are no issues during the purchase process, but the content does not get unlocked after purchasing. You should be able to reproduce this issue in a test environment.
Double check that you're checking the subscription status correctly and all of the products are added to Entitlements as needed.
Other Tipsβ
Reviewer provided "Next Steps"β
Sometimes, the reviewer will provide you with "Next Steps" to resolve the rejection. These are usually not the most helpful in pinpointing any issues with purchases. One of the more common reasons is shown below:
When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Appleβs test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead.
If you're using RevenueCat, sandbox and production purchases are automatically handled so even if the reviewer provides you with this reason, it's simply incorrect.
My app is live - but purchases are broken!β
When an app is launched for the first time or when new products are created for an existing app it can take 24 hours for purchases to work on the App Store and the app/update might show up hours before the products can be purchased. This is simply due to App Store propagation times β App Store data must be replicated to hundreds of servers around the world and this is apparently a slow, error-prone process for the App Store.
Once your app/update is 'Ready for Sale' your products should be available for purchase soon, but be prepared for it to take up to 24 hours. We recommend releasing the app at least 24 hours before mentioning the app publicly or kicking off any marketing efforts.
Just to be sure there's nothing wrong in the production environment, you can also follow this guide to testing in the production environment prior to releasing an app.