Understanding the rejection reason
There's usually three places in the purchase flow that cause the majority of App Store rejections:
- 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 including your products with your app for review. If an app has not already been approved for the App Store, the in-app purchase products must be submitted with your first app review.
Don't forget to submit the products with the first version of your app containing in-app purchases
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, here's a good article with the most common reasons this occurs.
Error during purchase
If an error occurs during the purchase process with RevenueCat, it will be one of the errors outlined in the 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 their 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 frequent, momentary outages in sandbox from time-to-time, but occasionally outages can last for days at a time.
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 after a purchase.
Other Tips
Reviewer provided "Next Steps"
Often times, the reviewer will provide you with "Next Steps" to resolve the rejection as they've done here. These are usually not the most helpful in pinpointing any issues with purchases.
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.
App rejections suck :(