π
π Want AI to audit your app automatically?
Install the skill and point it at your project folder β works with Claude Code, Cursor, Copilot + more.
npx skills add https://github.com/itsncki-design/app-store-submission-auditor
β
Run in terminal Β· works with Claude Code, Cursor, Copilot + more
β Copied to clipboard
App Store Rejection Guide
Grouped by app type. Every reason, what goes wrong, and how to fix it before you submit.
π· Categories
Social
Marketplace
Subscription
Any app
Privacy
π Total reasons
20 rejection reasons
π¬
Social apps
3
Apps with UGC, chat between strangers, user profiles, or location sharing
π«
No block user feature
Guideline 1.2
A report button alone is not sufficient. If your app has UGC, chat, or any interaction between strangers, Apple requires a dedicated block action. Blocked users must not be able to message, view profiles, or interact in any form.
- Add a dedicated block user action, separate from report
- Blocked users cannot message, view profiles, or interact in any way
- Make block accessible from both the user profile and within chat threads
π
Vague location permission strings
Guidelines 5.1.1 + 5.1.5
Strings like "Location is needed for the app to function" fail review. Apple requires you to specifically name which features use location, how the data is used, and where it goes. Calling getLocation() before requestPermission() is also a violation.
- Write specific
NSLocationWhenInUseUsageDescription strings that name the exact features
- Always call
requestPermission() before getLocation() β never after
- Only request location when a feature that needs it is active β not on app startup
- Example: "Your location shows nearby listings and displays your city on your profile. Never shared without your consent."
π
Wrong age rating for social features
Age Rating Requirements
UGC + chat between strangers + location = 12+ minimum. An incorrect age rating is grounds for removal after the app is live, not just rejection at review. Apple also checks that age gating is enforced inside the app itself.
- Rate your app 12+ if it includes any combination of UGC, live chat, or location sharing
- Enforce age gating at account creation β not just in the metadata form
- Apple will confirm age validation is explicit inside the app, not just declared
ποΈ
Marketplace apps
3
Swap, buy/sell, peer-to-peer transactions, listings with location
ποΈ
Account deletion via email is not compliant
Guideline 5.1.1(v)
A "Delete Account" button that opens Mail with a pre-filled message does not pass. Since June 2022, deletion must be initiated programmatically from within the app. "We'll process it in 30 days" flows don't meet the requirement either. Apple reviewers will test this by actually deleting demo accounts.
- Build an in-app delete account flow that triggers server-side deletion directly
- Add a confirmation step before deletion executes
- Account must be deleted (or deletion server-side initiated) immediately β no manual queues
- Include working demo credentials in Review Notes so Apple can test this flow
π
Broken or missing support URL
App Store Connect β Metadata
Your support URL in App Store Connect must be a real, working link. Reviewers visit it and check that your privacy policy and legal documents are actually accessible there β not just that the URL field is filled in.
- Verify your support URL resolves correctly before every submission
- Ensure your privacy policy and terms are live and loading at the linked URL
- Test from a fresh browser session β not your dev environment
π
Misleading screenshots or description
Guideline 2.3 β Accurate Metadata
Screenshots showing features that aren't in the current build, or descriptions that don't accurately reflect what the app does, will get flagged. Reviewers compare what they see in the app against what's presented in the store listing.
- Update screenshots every release to reflect the current version of the app
- Only describe features that exist and work in the submitted build
- Don't include screenshots from unreleased features or earlier designs
π³
Subscription & IAP apps
3
Auto-renewing subscriptions or any in-app purchases
π
Missing Apple's EULA β your ToS doesn't count
Guideline 3.1.2(c)
If you have subscriptions, Apple's standard EULA must be linked in both the App Store description and inside the app. Your own privacy policy or custom terms are not a substitute. Apple will reject you with the same vague message twice without ever clarifying what they actually want.
- Link Apple's standard EULA in your App Store description text:
apple.com/legal/internet-services/itunes/dev/stdeula/
- Also link it inside the app β typically in a Settings or About screen
- This is in addition to your own privacy policy, not instead of it
ποΈ
Subscription groups set up incorrectly
App Store Connect β In-App Purchases
Creating separate subscription groups for each tier (e.g. separate groups for monthly and yearly) causes IAP review failures. All tiers for the same product must live inside a single subscription group.
- Create one subscription group (e.g. "Premium") and put all tiers β monthly, yearly β inside it
- If already misconfigured, deleting and rebuilding from scratch is often easier than restructuring
- Confirm the correct group is attached to your submission before resubmitting
ποΈ
Unclear subscription renewal terms
Guideline 3.1.1
Apple reviewers will go through your purchase flow. Pricing, renewal dates, or cancellation steps that aren't clearly visible before the purchase screen will get flagged β especially trial periods that don't clearly state what happens when the trial ends.
- Show price, billing frequency, and auto-renewal disclosure before the purchase screen
- Make cancellation instructions findable β don't bury them in settings
- Clearly state when and how much users will be charged after any trial period ends
π
Privacy-first issues
2
Applies broadly but frequently missed β especially for apps collecting any user data
π‘οΈ
Missing or incomplete privacy policy
Guideline 5.1.1 β Privacy
Privacy violations are the single biggest cause of App Store rejections. Apple requires a clearly accessible, human-readable privacy policy that covers what data is collected, how it's used, who it's shared with, and how users can request deletion. Vague or developer-facing language doesn't pass.
- Write a clear, plain-language privacy policy β not just legalese copy-paste
- Cover: what data is collected, why, who sees it, and how to delete it
- Make the privacy policy accessible from both App Store listing and inside the app
- Only collect data your app actually needs β not "just in case" permissions
π
Third-party SDKs collecting data without disclosure
Guideline 5.1.1 β Third-Party Data
Analytics, advertising, and crash reporting SDKs often collect and share data. Apple holds you responsible for all data practices in your app β including what third-party libraries do. If your SDK collects data you haven't disclosed, it's your rejection.
- Audit every SDK in your app for what data it collects and where it sends it
- Disclose third-party data sharing in your privacy policy
- Complete the App Privacy nutrition label in App Store Connect accurately β Apple cross-checks this
- Remove or replace SDKs that collect data beyond what you've disclosed
π±
Any app
7
Technical and quality requirements that apply to every single submission
π²
App crashes on iPad
Guideline 2.1 β Performance
Even if you're only targeting iPhone, your app must be functional on iPad. Crashes on iPad are treated as performance failures regardless of your intended audience. Apple's reviewers test on both.
- Test on a physical iPad before every submission β simulator is not enough
- Fix any layout breaks or crashes at larger screen sizes
- App doesn't need to be iPad-optimized, but it must not crash
π
Hardcoded IPv4 addresses in the build
Guideline 2.5.5 β IPv6
Apple's review environment is IPv6-only with NAT64/DNS64. Connecting by domain name is fine β it's translated automatically. The failure mode is hardcoded IP literals like http://1.2.3.4/api or staging IPs accidentally left in the production build.
- Search your codebase for hardcoded IPv4 addresses before every submission
- Replace any IP literals with domain names
- Check for staging or internal IPs accidentally left in production builds
π
No demo account credentials provided
Review Notes β App Store Connect
If your app requires login, reviewers need working credentials in the Review Notes field. Without access to core functionality, reviewers will reject rather than reach out and ask for access.
- Always include a test email and password in Review Notes for login-required apps
- If multiple user roles exist, provide the one with access to the most important features
- Confirm the demo account is active and credentials are correct at the time of submission
π§ͺ
Placeholder content or beta labels in the build
Guideline 2.3 β Accurate Metadata
The App Store is production only. Placeholder text, empty screens, "coming soon" messages, or anything labelled "beta" or "demo" results in immediate rejection. A clean TestFlight run doesn't mean a clean App Store submission β Apple applies different standards at each stage.
- Remove all placeholder text, dummy content, and "coming soon" screens
- Test every button, screen, and user flow before submitting
- Use TestFlight for beta testing β the App Store is for finished, production-ready builds only
π
App has no real value or unique utility
Guideline 4.2 β Minimum Functionality
Apple rejects apps that offer little or no value compared to what already exists, or that are essentially just web wrappers, basic utilities, or thin apps without a clear reason to exist. The bar has gotten higher as the App Store has matured.
- Research what already exists in the App Store before submitting a new app
- Identify your unique value β what does your app do that others don't?
- If your app is a web wrapper, add meaningful native functionality that justifies the app format
π
Missing encryption declaration
Export Compliance β Info.plist
Every app must declare whether it uses encryption beyond standard HTTPS. If ITSAppUsesNonExemptEncryption is missing from your Info.plist, Apple will ask during submission and block your upload until it's answered. Most apps just use HTTPS and can set it to NO β but the key must be there.
- Add
ITSAppUsesNonExemptEncryption to your Info.plist
- If your app only uses standard HTTPS β set it to
NO
- If you use custom encryption β set to
YES and upload export compliance docs in App Store Connect
- Flutter: add to
ios/Runner/Info.plist
πΈ
Screenshots don't match the current app
Guideline 2.3 β Accurate Metadata
Screenshots showing features that aren't in the current build, or designs from an older version, will get flagged. Reviewers compare what they see in the app against what's shown in the store listing. Marketing renders or Figma mockups placed on device frames also don't pass.
- Take screenshots from the actual running app β not Figma, not design mockups
- Update screenshots every release to reflect the current version
- Only show features that exist and work in the submitted build
- Text overlays are fine as long as they don't misrepresent the actual UI
π
New in 2025β2026
3
Requirements that changed recently β catching people who haven't submitted in a while
π
Updated age rating tiers (January 2026)
Guideline 2.3.6 β Age Rating
Apple expanded age ratings from 4 tiers (4+/9+/12+/17+) to 5 tiers (4+/9+/13+/16+/18+) in January 2026, with new capability declarations required for messaging, UGC, advertising, and parental controls. If you haven't completed the updated questionnaire, your app updates will be blocked. Apps previously rated 12+ may now need 13+ or 16+.
- Go to App Store Connect β your app β Age Rating and complete the updated questionnaire
- If your app has chat, UGC, or advertising features β re-answer honestly, you may now be 13+ or 16+
- Getting the rating wrong is grounds for removal after the fact, not just at submission
π€
External AI service β consent required
Guideline 5.1.1 β Privacy (2025)
If your app sends personal user data to an external AI service (like OpenAI, Anthropic, Google Gemini, etc.), Apple now expects a clear consent moment before that data is transmitted. Silently passing user content to an AI backend without explicit consent is a privacy flag.
- Add a consent modal or clear disclosure before any personal data is sent to an external AI
- Disclose the AI service used in your privacy policy
- Give users the option to opt out or understand what's being shared
ποΈ
SDK minimum version β Xcode 26 required from April 2026
Guideline 2.5.1 β Software Requirements
Apple requires apps to be built with the current Xcode GM release. From April 28, 2026, all new submissions and updates must be built with Xcode 26 and the iOS 26 SDK. Apps built with older Xcode versions will be rejected at that point β even if the app itself hasn't changed.
- Keep Xcode updated β check the Mac App Store or developer.apple.com for the latest version
- Before April 28, 2026: submit with Xcode 16 / iOS 18 SDK
- After April 28, 2026: must use Xcode 26 / iOS 26 SDK for all new submissions and updates
- Flutter: update your Flutter SDK and run
flutter upgrade to ensure compatibility
β
Pre-submission checklist
Check off each item before you hit Submit for Review
π¬ Social apps
Block user feature implemented (not just report)
Location permission strings are specific and name the exact features
requestPermission() called before getLocation()
Location only requested when actually needed β not on startup
Age rating set to 12+ for apps with UGC, chat, or location
Age validation enforced inside the app at account creation
ποΈ Marketplace apps
In-app account deletion flow works programmatically
No email-based deletion flows
Support URL is live, resolves, and shows legal docs
Screenshots match the current build exactly
π³ Subscription apps
Apple's standard EULA linked in App Store description
Apple's EULA also linked inside the app
All subscription tiers are in a single subscription group
Price, renewal, and cancellation clearly visible before purchase
π Privacy
Privacy policy is clear, accessible, and in plain language
All third-party SDKs audited for data collection
App Privacy nutrition label filled in accurately
π± Any app
App tested on a physical iPad β no crashes
No hardcoded IPv4 addresses in the production build
Demo account credentials included in Review Notes
No placeholder content, beta labels, or broken flows
App offers real, unique utility vs. what already exists
ITSAppUsesNonExemptEncryption declared in Info.plist
Screenshots taken from running app β not Figma or mockups
π New in 2025β2026
Age rating questionnaire updated (new 13+/16+/18+ tiers β Jan 2026)
External AI consent modal added (if sending user data to AI service)
Built with Xcode 16+ now Β· Xcode 26 required from April 28, 2026
Social apps
3Apps with UGC, chat between strangers, user profiles, or location sharing
A report button alone is not sufficient. If your app has UGC, chat, or any interaction between strangers, Apple requires a dedicated block action. Blocked users must not be able to message, view profiles, or interact in any form.
Strings like "Location is needed for the app to function" fail review. Apple requires you to specifically name which features use location, how the data is used, and where it goes. Calling
getLocation()beforerequestPermission()is also a violation.NSLocationWhenInUseUsageDescriptionstrings that name the exact featuresrequestPermission()beforegetLocation()β never afterUGC + chat between strangers + location = 12+ minimum. An incorrect age rating is grounds for removal after the app is live, not just rejection at review. Apple also checks that age gating is enforced inside the app itself.