iOS In-App Review Prompt: When and How to Ask for Ratings
How the iOS in-app review prompt works: StoreKit's requestReview APIs, the three-per-year display limit, testing quirks and the best moments to ask.
ScreenShipper team · · 8 min read
Quick answer: On iOS you ask for ratings with Apple's system prompt, called through StoreKit: the SwiftUI requestReview environment action or AppStore.requestReview(in:) in UIKit. Your app only requests it; the system decides whether it appears and shows it at most three times in 365 days per person. Ask right after a successful moment, never at launch or from a button tap.
How the iOS review prompt works
The prompt is a standard system alert. People tap one to five stars and can write an optional review without leaving your app. You can't change its design, and you get nothing back: the call doesn't tell you whether the alert appeared or which rating someone gave.
Apple's StoreKit documentation spells out the display rules:
- If the person hasn't rated or reviewed your app on that device, StoreKit shows the prompt a maximum of three times within a 365-day period.
- If they have already rated or reviewed it, the prompt can return only for a new app version and only when more than 365 days have passed since their previous review.
- People can switch off rating requests for every app in their App Store settings, in which case your call silently does nothing.
Because of these rules, calling the API is a request, not a command. That is why your own timing logic matters more than the API call itself.
There is also a policy side. App Store Review Guideline 5.6.1 tells developers to use the provided API to prompt for reviews and says Apple will disallow custom review prompts. A homemade star screen that imitates the system alert is a rejection risk.
Which StoreKit API to use
Apple has replaced the original SKStoreReviewController methods with newer StoreKit APIs. Here is how they line up today:
| API | Use it from | Available since | Status |
|---|---|---|---|
RequestReviewAction via @Environment(\.requestReview) | SwiftUI | iOS 16, macOS 13, visionOS 1 | Current, recommended |
AppStore.requestReview(in:) with a UIWindowScene | UIKit | iOS 16 | Current |
SKStoreReviewController.requestReview(in:) | UIKit | iOS 14 | Deprecated in the iOS 18 SDK |
SKStoreReviewController.requestReview() | UIKit | iOS 10.3 | Deprecated since iOS 14 |
If your deployment target is iOS 16 or later, use the SwiftUI action or AppStore.requestReview(in:). If you still support iOS 15, keep the deprecated scene-based call behind an availability check.
The SwiftUI version in four steps
- Add
import StoreKitto the view that will ask. - Declare
@Environment(\.requestReview) private var requestReviewin that view. - When your own conditions are met, call
requestReview()on the main actor. - Record that you asked (for example, the current bundle version) so you never ask twice for the same version.
In UIKit, get the active UIWindowScene from your view's window and pass it to AppStore.requestReview(in:). Everything else stays the same.
Gate the call with your own logic
Apple's sample project shows a sensible pattern. It only asks when three conditions are true: the app hasn't prompted for the current bundle version, the person has completed the core task at least four times, and they have paused on the success screen for a few seconds. Apple notes the number four is arbitrary; pick a threshold that matches how often people complete your main task. The sample stores its counters with @AppStorage, and UserDefaults works just as well in UIKit.
When to ask for ratings (and when not to)
Apple's Human Interface Guidelines say to ask only after people have demonstrated engagement, to avoid first launch and onboarding, to avoid interrupting a task, and to consider waiting at least a week or two between requests. The StoreKit sample adds two more rules: don't ask immediately at launch, and don't ask as the result of a user action.
In practice, the best moment is the second after something went right:
| App type | Good moment to ask | Moment to avoid |
|---|---|---|
| Fitness | After a finished workout summary | Mid-workout or on the start screen |
| Productivity | After exporting or completing a project | While typing or right after an error |
| Games | After winning a level or beating a personal best | After losing, or during play |
| Photo and video | After saving or sharing an edit | While an export is still processing |
| Finance and budgeting | After reaching a savings goal | On a screen showing an overdue bill |
| Language learning | After a streak milestone | In the middle of a lesson |
A few extra guardrails keep you out of trouble:
- Never ask right after a crash, failed purchase, sync error or paywall.
- Require both time and depth, for example at least three sessions across five days plus one success event.
- Ask once per version at most, and skip versions that only fix bugs people complained about.
- Don't put a "Do you like the app?" screen in front of the system prompt to filter out unhappy users. Apple disallows custom review prompts, and Google's in-app review rules forbid this kind of pre-question outright. Offer a permanent "Send feedback" option instead.
Add a permanent "Rate this app" link the right way
You can't call the review prompt from a button, because the system may ignore the request and the button would appear broken. Apple's documentation covers this case: add a persistent link to your App Store product page in your settings or About screen, and append the query parameter ?action=write-review to your product page URL. That opens the App Store directly on the write-a-review sheet.
A good settings row reads "Rate [App Name] on the App Store" and sits next to "Send feedback" and "Contact support." People who want to praise you get a one-tap path, and people with a problem get routed to you instead of a one-star review.
How to test the review prompt
The prompt behaves differently depending on how the app was installed, which confuses many teams during QA:
| Environment | What happens when you request a review |
|---|---|
| Debug build run from Xcode | The prompt always appears, so you can test the UI and timing |
| TestFlight build | The request has no effect and nothing appears |
| App Store release | The system applies its limits and may show nothing |
Since TestFlight shows nothing, test your gating logic separately. Log each condition (session count, last prompted version, success events) and write unit tests for the function that decides whether to ask. Then confirm the actual alert in a debug build. For more on beta builds, see the TestFlight guide.
Turn ratings into downloads
Your summary rating appears in search results and on your product page, and it's calculated separately for each country or region. If an old version earned poor ratings, Apple lets you reset the summary rating when you release a new version, though it recommends doing so sparingly. The details are in how App Store ratings work.
Ratings also feed your creative. A strong average or a real, current review quote can become a social-proof screenshot; see social proof in App Store screenshots for the accuracy rules. And when reviews do arrive, answer them: replies are public, and people are notified when you respond. Our guide on how to respond to app reviews has templates.
For the full picture beyond the prompt, including support funnels and what the rules forbid, read how to get more app reviews. If you also ship on Android, the Google Play In-App Review API works on a similar idea but with an undisclosed quota.
Frequently Asked Questions
How many times can I show the App Store review prompt?
You can call the API as often as you like, but the system shows the prompt at most three times within a 365-day period for someone who hasn't rated your app on that device. Build your own logic so you ask at most once per version.
Why isn't my review prompt showing up?
The most common reasons are a TestFlight build (where the call does nothing), the yearly limit already being reached, the person having already rated the app, or the person having turned off in-app rating requests in their settings. The API gives no error in any of these cases.
Can I reward users for leaving a rating?
No. Guideline 3.2.2 says apps must not force people to rate or review to access features or content, and Guideline 5.6.3 treats manipulating reviews as discovery fraud. Rewarding ratings puts your developer account at risk.
Can I find out what rating a user gave in the prompt?
No. StoreKit handles the whole process and returns no result to your app. You'll see the ratings later in App Store Connect, aggregated per country or region, along with any written reviews.
Does the review prompt work on iPad, Mac and Vision Pro?
Yes. RequestReviewAction is available on iOS and iPadOS 16, Mac Catalyst 16, macOS 13 and visionOS 1 or later, so one SwiftUI implementation covers all of them.
Sources
Localize your screenshots in 50 languages
Add languages to one design, translate with AI on Pro and get warnings when a headline overflows.