Guideline 5.6.3
Guideline 5.6.3 - Developer Code of Conduct: Requesting App Ratings Too Early
Our Take
Apple is taking a hard stance on apps that request an app rating and review on first launch or during onboarding before they have had enough time to understand the app's value.
Under guideline 5.6.3 (Developer Code of Conduct), ratings and review prompts must only appear after a user has meaningfully engaged with the app, not the moment they open it for the first time.
It seems obvious, but Apple's reasoning is that a rating request shown before a user has experienced the product produces low-quality, uninformed reviews and pressures users who have nothing to base an opinion on yet.
The Developer Code of Conduct (and the App Store Review Guidelines on ratings and reviews) require the prompt to be a natural, well-timed moment — for example, after the user completes a core task, finishes a level, saves their first item, or experiences some other AHA moment.
Common triggers include:
Reviewers test fresh installs, so a launch-time prompt is caught reliably.
Resolution Guide
Remove the rating prompt from launch and onboarding
Delete any call to request a review from `application(_:didFinishLaunchingWithOptions:)`, your first view's `onAppear`/`viewDidAppear`, or anywhere in the sign-up/onboarding flow. Nothing should ask for a rating before the user reaches real functionality.
Trigger the prompt after meaningful engagement
Move the request to a natural success moment: after the user completes a core task, finishes a workout/level/edit, saves their first item, or opens the app several times across multiple days. Let the user experience value first.
Use Apple's official review API
Call `SKStoreReviewController.requestReview(in:)` (UIKit) or the SwiftUI `requestReview` environment value. The system limits how often the prompt appears and renders it natively — never build a custom star-rating modal that links to the App Store or gates the app.
Never gate functionality behind a rating
The user must be able to dismiss the prompt and keep using the app. Do not block content, features, or progress until they rate. (That overlaps with a separate 3.2.2 violation.)
Add a simple engagement gate in code
Track a counter (e.g. sessions ≥ 3, or after the Nth completed action) and only call the review API once the threshold is met. Persist it so the prompt isn't re-attempted every launch.
Test on a fresh install before resubmitting
Delete the app, reinstall, and walk through first launch and onboarding. Confirm no rating prompt appears anywhere in that flow.
Prevention
Example Rejection Email
Consider Appealing
Appeal only if the rating prompt is genuinely NOT shown on first launch or during onboarding — e.g. it is already gated behind meaningful engagement and the reviewer triggered it through an unusual path. In that case, reply with a screen recording showing the exact engagement steps required before the prompt appears. If the prompt does fire on launch or in onboarding, do not appeal — move it behind an engagement gate and resubmit; this is a quick, clear-cut fix.
Before & After
On first launch, the app calls SKStoreReviewController.requestReview() from the root view's onAppear — the user sees a 'Rate this app' prompt before doing anything
The review request is deferred behind an engagement gate (e.g. after the user completes 3 sessions or finishes their first core task) and uses the system requestReview API, so it never appears during first launch or onboarding
What changed: The issue is timing, not the prompt itself. Deferring the request until the user has experienced the app's value satisfies guideline 5.6.3.
Community Solutions · 0
Sign in to share your solution.
More Guideline 5 (Legal) rejections
- Guideline 5 - Legal: Remove Watermark Feature
- Guideline 5.1.1 - Data Collection and Storage: Incomplete Privacy Manifest
- Guideline 5.1.1 - Data Collection and Storage: Missing Purpose Strings
- Guideline 5.1.1 - Data Collection and Storage: Privacy Manifest Missing
- Guideline 5.1.1 - Data Collection and Storage: Privacy Nutrition Label Mismatch
- Guideline 5.1.1 - Data Collection and Storage: Privacy Policy