All skills

App Store optimization and marketing skills for descriptions, screenshots, keywords, review responses, and comprehensive promotional strategy. Use when user needs help with App Store presence, ASO, marketing, or customer communication.

Use this Skill: https://skilld.dev/gh/rshankras/claude-code-apple-skills/app-store

This session only. Nothing lands on disk.

rejection-handlercommon-rejections.md

≈4.9k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Common App Store Rejections

The top 20 App Store rejection reasons, organized by guideline. For each: what triggers it, example rejection message, how to fix, and a response template snippet.

Guideline 2.1: App Completeness

2.1 — Crashes

What triggers it: App crashes during review, on launch, or during core flows. Apple tests on current-generation devices with the latest OS.

Example rejection message:

We discovered one or more bugs in your app. Specifically, the app crashed when we tapped on the "Export" button on iPhone 15 Pro running iOS 18.2.

How to fix:

  • Reproduce on the exact device/OS cited (use Xcode Simulator or physical device)
  • Check crash logs in App Store Connect → App Analytics → Crashes
  • Test all core flows on the latest OS release
  • Pay special attention to edge cases: no network, empty data, permissions denied

Response template:

We've identified and resolved the crash in the export flow.
The issue was caused by [root cause]. Build [X.X (XX)] includes
the fix, verified on iPhone 15 Pro / iOS 18.2.

2.1 — Broken Links or Placeholder Content

What triggers it: Links that 404, screens that say "Coming Soon", lorem ipsum text, test data visible in the UI.

Example rejection message:

Your app includes placeholder content. Specifically, the "Community" tab displays "Coming Soon" text without functional content.

How to fix:

  • Remove or hide any unfinished features entirely
  • Replace placeholder text with real content
  • Ensure all URLs (privacy policy, support, terms) resolve to live pages
  • Remove any "beta" or "test" labels

Response template:

We've removed the placeholder content from the Community tab.
This feature has been removed from the current release and will
be included in a future update when fully implemented.

2.1 — Missing Demo Account

What triggers it: App requires login but no test credentials were provided in App Review Notes.

Example rejection message:

We were unable to review your app as it requires a login but no demo account was provided.

How to fix:

  • Provide a valid demo account in App Store Connect → App Review Information → Notes
  • Ensure the demo account has access to all features
  • Don't use an account that might be rate-limited or expire
  • Format: "Demo account: user@example.com / password123"

Response template:

We apologize for the oversight. Demo credentials have been added
to the App Review notes: [email] / [password]. This account has
full access to all app features.

Guideline 2.3: Accurate Metadata

2.3 — Misleading Description or Screenshots

What triggers it: Screenshots don't match the current app UI, description promises features that don't exist, or marketing overstates capabilities.

Example rejection message:

Your app's screenshots do not accurately reflect the app in use. Specifically, screenshot 3 shows a feature that is not present in the current version.

How to fix:

  • Retake all screenshots from the current build
  • Ensure every feature mentioned in the description exists in the app
  • Remove any claims that can't be substantiated
  • Match What's New text to actual changes in this version

Response template:

We've updated all screenshots to reflect the current app UI.
Screenshot 3 has been replaced with an accurate representation
of the [feature name] screen as it appears in this build.

2.3 — Keyword Stuffing or Misleading Keywords

What triggers it: Irrelevant keywords in the keyword field, competitor names, category names, or misleading terms.

Example rejection message:

Your app's metadata includes misleading content. Specifically, the keyword field contains competitor app names.

How to fix:

  • Remove all competitor brand names from keywords
  • Remove category names (already indexed automatically)
  • Remove irrelevant terms that don't describe your app
  • Use only keywords directly relevant to your app's functionality

Response template:

We've updated the keyword field to remove all third-party brand
names and irrelevant terms. Keywords now accurately reflect our
app's features and functionality.

Guideline 2.5.1: Software Requirements

2.5.1 — Private API Usage

What triggers it: App calls private Apple frameworks or undocumented APIs. Apple's static analysis detects these automatically.

Example rejection message:

Your app uses non-public API/framework: UIWebDocumentView. This is not permitted on the App Store.

How to fix:

  • Search your codebase for the cited API name
  • Check third-party SDKs and libraries — they often contain private API calls
  • Replace with public alternatives
  • Update any outdated libraries that may use deprecated private APIs
  • Use nm or otool on your binary to check for private symbols

Response template:

We've removed the non-public API usage. The reference to
[API name] was in [library name], which has been updated to
version [X.X] that uses only public APIs.

Guideline 3.1.1: In-App Purchase

3.1.1 — Digital Goods Not Using IAP

What triggers it: App sells digital content, features, or subscriptions through external payment processors (Stripe, PayPal, etc.) instead of Apple's In-App Purchase.

Example rejection message:

Your app offers digital content for purchase but does not use the In-App Purchase API. Specifically, the premium themes are available for purchase via an external payment system.

How to fix:

  • Implement StoreKit 2 for all digital content purchases
  • Remove external payment links/buttons for digital goods
  • Physical goods and services CAN use external payment
  • Reader apps have specific exemptions (Guideline 3.1.3)

Response template:

We've migrated all digital content purchases to Apple's In-App
Purchase system. Premium themes are now available as non-consumable
IAPs through StoreKit 2. External payment references have been
removed.

3.1.1 — Directing Users to External Purchase

What triggers it: App includes language, buttons, or links encouraging users to purchase outside the app (even if IAP is also offered).

Example rejection message:

Your app includes a button or link that directs users to an external payment mechanism for items that are required to be purchased through In-App Purchase.

How to fix:

  • Remove all "buy on our website" buttons or text for digital goods
  • Remove pricing pages that link to external checkout
  • Don't mention that content is cheaper on your website
  • Reader app entitlement allows linking out for account management only

Response template:

We've removed all references to external purchasing for digital
content. The "Buy on Web" button and associated links have been
removed. All digital purchases now go through IAP exclusively.

US storefront exception: Apps on the United States storefront may link out using the StoreKit External Purchase Link entitlement (currently 0% commission on those sales; litigation ongoing in mid-2026 — re-verify before relying on it). The rejection pattern above applies to links WITHOUT the entitlement and to all non-US storefronts. For the strategy trade-offs, see monetization/external-purchases.

Guideline 3.1.2: Subscriptions

3.1.2 — Subscription Requirements

What triggers it: Subscription doesn't provide ongoing value, unclear pricing terms, no way to manage subscription in-app, or auto-renewal terms not clearly communicated.

Example rejection message:

Your app's subscription does not provide ongoing value to the user. The content available through the subscription is static and does not justify a recurring charge.

How to fix:

  • Ensure subscription includes regularly updated content or ongoing service
  • Add clear subscription terms on the paywall (price, duration, renewal terms)
  • Include in-app access to subscription management
  • Link to Apple's subscription management page
  • Show what users get for their ongoing payment

Response template:

Our subscription provides ongoing value through [specific
ongoing benefits: weekly content updates, cloud sync, continuous
AI processing, etc.]. We've also added clearer subscription
terms on the purchase screen and a direct link to subscription
management.

Guideline 4.0: Design

4.0 — Not Enough Native UI / Web Wrapper

What triggers it: App is primarily a web view wrapping an existing website without meaningful native functionality.

Example rejection message:

Your app is primarily a web-based experience and does not provide enough native iOS functionality. We encourage you to consider building a native app that takes advantage of iOS features.

How to fix (if web-based is intentional):

  • Add meaningful native features: push notifications, widgets, Shortcuts/Siri
  • Use native navigation (NavigationStack, TabView) instead of web navigation
  • Implement offline functionality
  • Add native sharing, haptics, or device-specific features
  • If the app truly should be a website, consider not submitting it

Response template:

While [App Name] does use web views for [specific content],
it provides significant native functionality including:
- Push notifications for [purpose]
- Home screen widget showing [content]
- Offline access to [feature]
- Native [iOS feature] integration

These features require a native app and cannot be delivered
through a website alone.

4.0 — Poor UI Quality

What triggers it: App has obviously unfinished UI, uses no standard iOS patterns, has layout issues, or looks unprofessional.

Example rejection message:

Your app does not comply with the design guidelines for iOS apps. Specifically, the app includes UI elements that are inconsistent with standard iOS design patterns.

How to fix:

  • Use system components (SwiftUI standard views, UIKit standard controls)
  • Follow Human Interface Guidelines for spacing, typography, and color
  • Support Dynamic Type for accessibility
  • Support Dark Mode
  • Ensure layouts work on all supported screen sizes

Response template:

We've updated the app's design to align with iOS Human Interface
Guidelines. Changes include [specific UI improvements]. The app
now uses standard iOS components for [navigation/buttons/lists]
and supports Dynamic Type and Dark Mode.

Guideline 4.2: Minimum Functionality

4.2 — App Is Too Simple

What triggers it: App provides functionality that could be achieved with a bookmark, a simple website, or is too basic for the App Store.

Example rejection message:

We found that the usefulness of your app is limited by the minimal amount of content or features it includes. We encourage you to review your app concept and incorporate additional features and content.

How to fix (if you agree it's too simple):

  • Add 2-3 meaningful features beyond the core function
  • Include settings, customization, or personalization
  • Add data visualization, history, or insights
  • Implement native features: widgets, notifications, Siri Shortcuts
  • Consider whether a more comprehensive app would serve users better

How to push back (if your app is intentionally focused):

  • Explain the design philosophy of focused simplicity
  • Reference comparable apps on the App Store
  • Highlight native features that justify app vs. website
  • Provide user testimonials or usage data if available

Response template (fixing):

We've added substantial functionality to the app:
- [New feature 1]
- [New feature 2]
- [New feature 3]
Build [X.X (XX)] includes these improvements.

Response template (pushing back):

[App Name] is intentionally designed as a focused [type] tool.
Despite its streamlined interface, it provides meaningful
functionality that requires a native app:
- [Native feature 1: widgets, notifications, etc.]
- [Native feature 2]
- [Unique value proposition]

The app has [X users / X positive reviews / serves a specific
use case] that demonstrates its value to users.

Guideline 4.3: Spam

4.3 — Duplicate or Template Apps

What triggers it: App is substantially similar to other apps you've submitted, appears to be generated from a template without meaningful customization, or copies another developer's app.

Example rejection message:

Your app duplicates the content and functionality of other apps currently available on the App Store, which is considered spam.

How to fix:

  • Differentiate your app with unique features, content, or design
  • If you have multiple similar apps, consider consolidating into one
  • Remove template boilerplate and customize the experience
  • Add unique content that distinguishes your app

Response template:

[App Name] is distinct from [other app] in the following ways:
- [Unique feature or audience 1]
- [Different content or purpose 2]
- [Technical differentiation 3]

These apps serve different user segments: [App 1] targets
[audience A] while [App 2] targets [audience B].

Guideline 5.1.1: Data Collection and Storage

5.1.1 — Missing Privacy Policy

What triggers it: App collects any user data but doesn't provide a privacy policy URL, or the URL leads to a dead page.

Example rejection message:

Your app collects user data but does not include a privacy policy URL in App Store Connect.

How to fix:

  • Create a privacy policy covering all data your app collects
  • Host it at a stable URL (your website, GitHub Pages, or a service like Termly)
  • Add the URL in App Store Connect → App Information → Privacy Policy URL
  • Ensure the page loads correctly on mobile

Response template:

We've added our privacy policy at [URL]. It covers all data
collection, usage, and sharing practices in the app. The URL
has been added to App Store Connect.

5.1.1 — Excessive Data Collection

What triggers it: App collects data that isn't necessary for its core functionality, or collects data without clear user consent.

Example rejection message:

Your app collects user data that is not necessary for the app's core functionality. Specifically, the app requests access to Contacts, which does not appear to be needed.

How to fix:

  • Remove permissions requests for data you don't strictly need
  • Add clear usage descriptions for all permission requests (NSUsageDescription)
  • Request permissions in context (when the user triggers the relevant feature)
  • Don't request all permissions at launch

Response template:

We've removed the Contacts permission request as it is not
essential to the app's core functionality. The app now only
requests [remaining permissions] which are required for
[specific features].

Guideline 5.1.2: Data Use and Sharing

5.1.2 — App Tracking Transparency

What triggers it: App tracks users across apps/websites without presenting the ATT prompt first, or collects IDFA without the ATT framework.

Example rejection message:

Your app uses the AppTrackingTransparency framework but does not present the tracking permission request to the user before collecting data used to track them.

How to fix:

  • Present ATT prompt before any tracking begins
  • Don't track if user denies permission
  • Ensure ATT prompt has a clear purpose string (NSUserTrackingUsageDescription)
  • Don't incentivize users to allow tracking
  • Check that all third-party SDKs (analytics, ad networks) respect ATT status

Response template:

We've updated the app to present the ATT permission prompt
before any tracking occurs. Third-party SDKs have been
configured to respect the user's tracking preference. No data
is collected for tracking purposes until explicit consent is
granted.

5.1.2 — Privacy Nutrition Label Mismatch

What triggers it: The privacy labels declared in App Store Connect don't match the app's actual data collection practices.

Example rejection message:

Your app's privacy information does not accurately reflect the app's data collection practices. The app collects [data type] which is not declared in the privacy nutrition labels.

How to fix:

  • Audit all data collection in your app AND third-party SDKs
  • Update App Store Connect privacy labels to match actual behavior
  • Use Apple's privacy manifest to document API usage (iOS 17+)
  • Check SDK documentation for their data collection disclosures

Response template:

We've updated the privacy nutrition labels in App Store Connect
to accurately reflect all data collection. Specifically, we've
added [data type] under [category]. We've also audited all
third-party SDKs to ensure complete disclosure.

Guideline 5.2.1: Legal Requirements

5.2.1 — Local Law Compliance

What triggers it: App content or functionality violates laws in specific territories (gambling, health claims, age restrictions, financial regulations).

Example rejection message:

Your app includes [feature] that may not comply with local laws in [territory]. Please ensure your app complies with all applicable laws.

How to fix:

  • Research laws in all territories where your app is available
  • Restrict distribution to compliant territories using App Store Connect
  • Add required disclaimers for health, financial, or legal content
  • Implement age gates where required
  • Consult legal counsel for regulated industries

Response template:

We've addressed the compliance concern by [specific action:
adding age gate / restricting distribution / adding disclaimer].
The app is now limited to territories where [feature] is
permitted and includes appropriate [disclaimers/restrictions].

Quick Reference: Rejection to Fix Mapping

Guideline Common Cause Typical Fix Time Difficulty
2.1 Crashes Untested edge case 1-3 days Low-Medium
2.1 Placeholder Incomplete feature 1-2 days Low
2.1 Demo account Missing review notes 10 minutes Low
2.3 Screenshots Outdated assets 1-2 hours Low
2.3 Keywords Competitor names 10 minutes Low
2.5.1 Private API Third-party SDK 1-3 days Medium
3.1.1 IAP External payment 3-7 days High
3.1.2 Subscription Missing terms 1-2 days Medium
4.0 Web wrapper Insufficient native 1-2 weeks High
4.0 Poor UI Design quality 3-7 days Medium
4.2 Too simple Insufficient features 1-2 weeks High
4.3 Spam Duplicate apps Varies High
5.1.1 Privacy policy Missing URL 1-2 hours Low
5.1.1 Data collection Excess permissions 1-2 days Low-Medium
5.1.2 ATT Missing prompt 1-2 days Medium
5.1.2 Nutrition labels Inaccurate labels 1-2 hours Low
5.2.1 Legal Territory laws Varies High

When Each Strategy Applies

Rejection Type Fix Clarify Push Back Appeal
2.1 Crashes ✅
2.1 Placeholder ✅
2.3 Metadata ✅
2.5.1 Private API ✅
3.1.1 IAP ✅ Sometimes
3.1.2 Subscriptions ✅ Sometimes
4.0 Design ✅ Sometimes Sometimes
4.2 Minimum functionality Sometimes ✅ ✅ ✅
4.3 Spam ✅ ✅ Sometimes Sometimes
5.1.1 Privacy ✅
5.1.2 Tracking ✅
5.2.1 Legal ✅

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The app-store skill provides specialized capabilities for App Store Optimization and marketing. It includes sub-skills for handling rejections, analyzing market originality, and managing In-App Purchases (IAP). The skill uses local shell execution for a provided Python utility to interact with the App Store Connect API. While it processes external data from web searches and project files, which introduces an indirect prompt injection surface, the risk is mitigated by explicit requirements for user confirmation and mandatory 'dry-run' reviews of actions.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer7mo

    4/17 files flagged

  • ZeroLeaks5mo

    Scan incomplete

Signed by skilld at 32566aa. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Steadyupdated 3 months ago
What it can do
Reads files Edits files Network
last_verified
2026-07-16
review_by
2027-06-22
All 7 allowed tools
ReadWriteEditGlobGrepAskUserQuestionWebSearch

README badge

README badge for rshankras/claude-code-apple-skills/app-store