How to Add an In-App Review Prompt in Swift (Safely)
The in-app review prompt is one API call, but misuse gets you rejected. Ask after a moment of satisfaction, never behind a button, and let the system throttle.
TL;DR
Use SKStoreReviewController's requestReview to show the App Store review prompt, but follow the rules: the system shows it at most 3 times per 365 days per user, never in TestFlight, and you must not gate it behind a button tap or incentivize reviews (App Store guideline 1.1.7). Ask after a moment of satisfaction (a completed task), once per version, for users who have been around a week. Build the surrounding UI free from a VP0 design.
Adding an App Store review prompt in Swift? The short answer: it is one API call with SKStoreReviewController, but misuse gets you rejected, so ask after a moment of satisfaction, never behind a button, and respect the system’s limits. Build the surrounding UI free from a VP0 design, the free iOS design library for AI builders, and wire the prompt correctly. The rules are simple and worth following. It helps to know the backdrop: Apple rejected more than 1.7 million app submissions in 2023, over 248,000 of them for spam or copycat behavior.
Who this is for
This is for iOS developers who want more ratings without annoying users or risking rejection, and want to use Apple’s review prompt the way Apple intends.
The rules that keep you safe
Per the Apple SKStoreReviewController documentation and guides like SwiftLee’s, the system shows the prompt at most 3 times per 365 days per user, per app, and never in TestFlight builds. App Store guideline 1.1.7 forbids incentivizing reviews or gating content behind a rating. Crucially, because the system may or may not show the prompt, you must not call it in direct response to a button tap, that would be a button that sometimes does nothing. Instead, trigger requestReview after the user has shown engagement and satisfaction. The requestReview documentation covers the call (use the scene-based requestReview(in:) on newer iOS).
| Rule | What it means | Why |
|---|---|---|
| Max 3 per 365 days | System-throttled per user | Prevents spam |
| Not in TestFlight | Won’t appear in beta | Test in production |
| No gating or incentives | Guideline 1.1.7 | No coerced reviews |
| Not on a button tap | May or may not show | Avoids dead buttons |
| Ask after a win | Timing matters | More positive reviews |
Build the UI free with a VP0 design
The review prompt is system UI, but the moments around it are yours. Build a satisfying completion screen from a VP0 design, then trigger the prompt after it:
Build a SwiftUI task-complete screen from this design: [paste VP0 link] that shows a success moment. After it appears for an engaged user, call requestReview once per app version, not on a button tap. Match the palette and spacing from the reference, and generate clean code.
For neighboring review and growth workflows, see will Apple reject my AI-generated app, how to get your first 100 users for an AI app, an in-app purchase paywall UI template in SwiftUI, and how to make an AI app look native on iOS.
Time it well
The art is in the timing. Ask after a moment of genuine satisfaction, a completed task, a finished level, a successful action, and only for users who have used the app for at least a week, so they actually have an opinion. Limit to once per app version, and space requests by at least a day so a user who hits several happy moments is not pestered. Because the system throttles to three prompts a year, you want to spend those on your best moments. Wire it after a success screen, not behind a button, and you get more positive ratings while staying well within Apple’s rules.
Common mistakes
The first mistake is calling requestReview on a button tap, which may show nothing. The second is incentivizing or gating content behind a review, violating guideline 1.1.7. The third is asking too early, before the user has formed an opinion. The fourth is testing in TestFlight and wondering why no prompt appears. The fifth is asking repeatedly within a version, wasting the limited prompts.
Key takeaways
- Use SKStoreReviewController requestReview, triggered after a moment of satisfaction.
- The system shows it at most 3 times per 365 days per user, and never in TestFlight.
- Never gate content behind a review or incentivize ratings (guideline 1.1.7).
- Do not call it on a button tap, since it may or may not show.
- Ask once per version, for week-plus users; build the surrounding UI from a free VP0 design.
Frequently asked questions
How do I add an in-app App Store review prompt in Swift? Use SKStoreReviewController requestReview (scene-based on newer iOS), called after a moment of satisfaction, not on a button tap. The system decides whether to show it.
What are the limits on the review prompt? At most 3 times per 365 days per user, none in TestFlight, and no incentivizing or gating per guideline 1.1.7.
Why shouldn’t I show the review prompt on a button tap? Because the system may not show it, making the button sometimes do nothing. Trigger it after engagement instead.
When is the best time to ask for a review? After genuine satisfaction, for a week-plus user, once per app version.
Frequently asked questions
How do I add an in-app App Store review prompt in Swift?
Use SKStoreReviewController's requestReview (the requestReview(in:) scene-based variant on newer iOS). Call it after a moment of satisfaction, like completing a task, not in response to a button tap. The system decides whether to show it and limits how often, so you cannot guarantee it appears.
What are the limits on the review prompt?
The system shows the prompt at most 3 times per 365 days per user, per app, and it does not appear in TestFlight builds. You also cannot incentivize reviews or gate content behind a rating, per App Store guideline 1.1.7. These rules prevent spammy or coerced reviews.
Why shouldn't I show the review prompt on a button tap?
Because the system may or may not show it, so a button that sometimes does nothing is a poor experience and is discouraged. Trigger requestReview after the user has shown engagement and satisfaction, not as a direct response to a tap.
When is the best time to ask for a review?
After a moment of genuine satisfaction, completing an action, level, or task, for a user who has used the app for at least a week, and only once per app version. That timing maximizes positive reviews without annoying anyone.
Part of the Compliance, Localization & Accessibility hub. Browse all VP0 topics →
Keep reading
App Store Rejection 4.0 Design: How to Fix It
Got an App Store 4.0 design rejection? It means the app does not feel native or polished. Here is how to fix the design so it passes review.
App Store Rejection 4.2.2: Fix Minimum Functionality
Got an App Store 4.2.2 rejection for an AI-built app? It means too thin or a repackaged website. Here is how to add real native value and pass review.
Fix App Store Rejection 4.2 and 4.3 for AI-Built Apps
Hit with App Store 4.2 (minimum functionality) and 4.3 (spam) on an AI-built app? Here is how to fix both: add real native value and make it genuinely distinct.
App Store AI Design Rejection: How to Actually Clear It
You cannot bypass an App Store design rejection, but you can clear it fast. Here is how to fix an AI-built app's design so review passes it, the honest way.
App Store Rejection 4.3 Spam: Fix It for AI Apps
Got an App Store 4.3 spam rejection? It means your app looks like many others. Here is how to make a template-based or AI-built app genuinely distinct.
App Store Approval Service for AI Apps? Do This Free
Tempted to pay an App Store approval service for an AI app? No service can guarantee approval. Here is the free, self-service path that actually clears review.