axiom-app-store-ref

App Store submission reference — complete metadata field specs, App Review guideline index, privacy manifest schema, age rating system, export compliance, EU DSA requirements, IAP review pipeline, and WWDC25 submission changes

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "axiom-app-store-ref" with this command: npx skills add megastep/codex-skills/megastep-codex-skills-axiom-app-store-ref

App Store Submission Reference

Overview

Complete reference for every App Store submission requirement:

  • Part 1 — Required metadata fields (descriptions, screenshots, keywords, App Review info)
  • Part 2 — Privacy requirements (manifest schema, nutrition labels, ATT, Required Reason APIs)
  • Part 3 — App Review Guidelines quick reference (all sections 1-5)
  • Part 4 — Age rating system (5-tier, capabilities, regional variations)
  • Part 5 — Export compliance (encryption decision tree)
  • Part 6 — Account and authentication requirements (deletion, SIWA)
  • Part 7 — Monetization and IAP submission pipeline
  • Part 8 — EU-specific compliance (DSA trader status)
  • Part 9 — Build upload and processing
  • Part 10 — WWDC25 changes (draft submissions, accessibility labels, tags)

When to Use This Skill

Use when

  • Looking up specific metadata field requirements or character limits
  • Checking App Review guideline numbers for a specific topic
  • Verifying privacy manifest schema fields or Required Reason API categories
  • Understanding age rating tiers and new capability declarations
  • Checking EU compliance requirements for DSA trader status
  • Understanding IAP submission pipeline and review flow
  • Preparing builds for upload (SDK requirements, encryption, signing)

Do NOT use when

  • Deciding if your app is ready to submit (use app-store-submission)
  • Troubleshooting a rejection (use app-store-diag)
  • Implementing in-app purchases (use storekit-ref)
  • Writing privacy manifest code (use privacy-ux)
  • Auditing accessibility compliance (use accessibility-diag)

Related Skills

  • app-store-submission — Discipline skill with pre-flight checklist and workflow
  • app-store-diag — Rejection troubleshooting and appeal guidance
  • privacy-ux — Privacy manifest implementation, ATT UX, permission requests
  • storekit-ref — StoreKit 2 API reference for IAP implementation
  • accessibility-diag — Accessibility compliance scanning and VoiceOver testing

Key Terminology

TermDefinition
App Store ConnectWeb portal and API for managing app metadata, builds, pricing, TestFlight, and analytics
App ReviewApple's human review process that evaluates every app update against the App Review Guidelines
Privacy ManifestPrivacyInfo.xcprivacy file declaring data collection, tracking domains, and Required Reason API usage
Required Reason APISystem APIs (file timestamps, disk space, user defaults, etc.) that require declared usage reasons
Privacy Nutrition LabelApp Store privacy cards showing what data your app collects and how it uses it
DSA Trader StatusEU Digital Services Act classification determining if you are a "trader" selling to EU consumers
Build StringUnique identifier for each uploaded build (e.g., "1.2.3.4"), separate from version number
Bundle IDReverse-domain identifier (e.g., "com.company.app") uniquely identifying your app across Apple's ecosystem

Part 1: Required Metadata Fields

App Information

FieldRequiredLocalizableMax LengthNotes
App NameYesYes30 charsMust be unique on the App Store
SubtitleNoYes30 charsAppears below app name in search results
DescriptionYesYes4000 charsPlain text, no HTML or rich formatting
Promotional TextNoYes170 charsEditable without new submission
KeywordsYesYes100 bytesComma-separated, each keyword >2 chars
What's NewYes*Yes4000 chars*Required for all versions except first
CopyrightYesNoFormat: "YYYY Company Name"
Support URLYesYesMust link to actual contact information
Marketing URLNoYesOptional promotional page
Privacy Policy URLYesYesHTTPS, publicly accessible

Visual Assets

AssetRequiredLocalizableSpecification
App IconYesNo1024x1024 PNG, no alpha, no rounded corners
ScreenshotsYesYesPer device size, 2-10 per locale per device
App PreviewNoYesUp to 3 videos per device size per locale

Screenshot Requirements

Screenshots must be provided for each device size you support:

DeviceRequired Size (portrait)Required Size (landscape)
iPhone 6.9"1320 x 28682868 x 1320
iPhone 6.7"1290 x 27962796 x 1290
iPhone 6.5"1284 x 27782778 x 1284
iPhone 5.5"1242 x 22082208 x 1242
iPad Pro 13"2048 x 27322732 x 2048
iPad Pro 12.9"2048 x 27322732 x 2048

Screenshots must show the app in actual use. Not permitted: title art alone, login screens, splash screens, or screens from other platforms.

App Preview Video Specifications

SpecificationRequirement
Duration15-30 seconds
FormatH.264, ProRes 422
AudioEnglish or localized; no offensive content
Frame rate30 or 60 fps
ResolutionMust match screenshot dimensions for the device
ContentMust show actual app footage; no device frames allowed in video
Per localeUp to 3 preview videos per device size per locale

App Icon Requirements

SpecificationRequirement
Size1024 x 1024 pixels
FormatPNG
Color spacesRGB or P3
Alpha channelNot allowed
Rounded cornersNot allowed (system applies automatically)
Layers/transparencyNot allowed
ContentMust be appropriate for 4+ rating regardless of app's actual rating

App Review Information

FieldRequiredNotes
Contact First NameYesReviewer contact
Contact Last NameYesReviewer contact
Contact EmailYesMust be monitored
Contact PhoneYesInclude country code
Notes for ReviewNoUp to 4000 bytes; explain non-obvious features
Sign-in UsernameIf login requiredMust not expire during review
Sign-in PasswordIf login requiredMust not expire during review
AttachmentNoUp to 10 files, max 512 MB total

Metadata Rules (Guideline 2.3)

  • App names must be unique, max 30 characters
  • Keywords must not include trademarked terms, popular app names, or pricing terms ("free", "sale")
  • Screenshots must show the app in use, not just marketing art
  • Icons, screenshots, and previews must be appropriate for a 4+ rating even if the app is rated higher
  • "For Kids" and "For Children" are reserved for the Kids category
  • No other mobile platform names or imagery in screenshots (no Android phones, Windows logos)
  • Metadata must accurately reflect app functionality; misleading metadata is grounds for rejection

Localization Requirements

AspectDetails
MinimumPrimary language required; all other localizations optional
Per-locale metadataApp name, subtitle, description, keywords, What's New, screenshots
Promotional TextLocalizable and editable without new submission
ScreenshotsCan differ per locale (show localized UI)
App PreviewsCan differ per locale (show localized audio/UI)
URL fieldsSupport URL and Marketing URL can differ per locale

When localizing, provide screenshots that match the localized UI. Reviewers check that screenshots accurately represent the app in each locale.

Category Selection

Primary CategorySecondary CategoryRules
RequiredOptionalChoose the category that best describes your app
Must be accurateCan complement primaryInaccurate category is grounds for rejection (2.3.7)
Games have subcategoriesGames must also select up to 2 game subcategories

Available categories: Books, Business, Developer Tools, Education, Entertainment, Finance, Food & Drink, Games, Graphics & Design, Health & Fitness, Lifestyle, Magazines & Newspapers, Medical, Music, Navigation, News, Photo & Video, Productivity, Reference, Shopping, Social Networking, Sports, Travel, Utilities, Weather.


Part 2: Privacy Requirements

Privacy Policy (Guideline 5.1.1(i))

Required in BOTH locations:

  1. App Store Connect metadata (Privacy Policy URL field)
  2. Within the app itself (accessible from settings or equivalent)

The privacy policy must identify:

  • What data is collected and by what means
  • All uses of collected data
  • Third-party sharing practices
  • Data retention and deletion policies
  • How users can revoke consent

Privacy Manifest Schema (PrivacyInfo.xcprivacy)

<!-- Top-level keys -->
NSPrivacyTracking              <!-- Boolean: Does app track users? -->
NSPrivacyTrackingDomains       <!-- Array<String>: Domains used for tracking -->
NSPrivacyCollectedDataTypes    <!-- Array<Dictionary>: Data collected -->
NSPrivacyAccessedAPITypes      <!-- Array<Dictionary>: Required Reason APIs -->

NSPrivacyCollectedDataTypes Entry

Each dictionary in the array contains:

KeyTypeDescription
NSPrivacyCollectedDataTypeStringCategory key (e.g., "NSPrivacyCollectedDataTypeName")
NSPrivacyCollectedDataTypePurposesArray<String>Purpose keys for this data type
NSPrivacyCollectedDataTypeLinkedBooleanIs this data linked to user identity?
NSPrivacyCollectedDataTypeTrackingBooleanIs this data used for tracking?

NSPrivacyAccessedAPITypes Entry

Each dictionary in the array contains:

KeyTypeDescription
NSPrivacyAccessedAPITypeStringAPI category identifier
NSPrivacyAccessedAPITypeReasonsArray<String>Approved reason codes for usage

Complete PrivacyInfo.xcprivacy Example

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyCollectedDataTypes</key>
    <array>
        <dict>
            <key>NSPrivacyCollectedDataType</key>
            <string>NSPrivacyCollectedDataTypeEmailAddress</string>
            <key>NSPrivacyCollectedDataTypeLinked</key>
            <true/>
            <key>NSPrivacyCollectedDataTypeTracking</key>
            <false/>
            <key>NSPrivacyCollectedDataTypePurposes</key>
            <array>
                <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
            </array>
        </dict>
    </array>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

API Category Identifiers

CategoryIdentifier String
File timestampNSPrivacyAccessedAPICategoryFileTimestamp
System boot timeNSPrivacyAccessedAPICategorySystemBootTime
Disk spaceNSPrivacyAccessedAPICategoryDiskSpace
Active keyboardNSPrivacyAccessedAPICategoryActiveKeyboards
User defaultsNSPrivacyAccessedAPICategoryUserDefaults

Generating Aggregate Privacy Report

Xcode > Product > Archive > Generate Privacy Report

This produces a PDF summarizing privacy manifests from your app and all embedded frameworks.

Required Reason API Categories

CategoryAPIs CoveredCommon Reasons
File timestampNSFileCreationDate, NSFileModificationDate, NSURLContentModificationDateKeyDDA9.1 (display to user), C617.1 (inside app container)
System boot timesystemUptime, mach_absolute_time35F9.1 (measure elapsed time)
Disk spaceNSFileSystemFreeSize, NSFileSystemSize, volumeAvailableCapacityKeyE174.1 (check before writing), 85F4.1 (display to user)
Active keyboardactiveInputModes54BD.1 (customize UI for keyboard)
User defaultsUserDefaults (all access requires declaration)CA92.1 (access within app group), 1C8F.1 (access within same app)

App Privacy Details (Nutrition Labels)

Data Type Categories

CategoryExamples
Contact InfoName, email address, phone number, physical address
Health & FitnessHealth data, fitness data
Financial InfoPayment info, credit info
LocationPrecise location, coarse location
Sensitive InfoRacial or ethnic data, sexual orientation, religion, biometrics
ContactsAddress book contacts
User ContentPhotos, videos, audio, gameplay content, customer support messages
Browsing HistoryWeb browsing history
Search HistoryIn-app search history
IdentifiersUser ID, device ID
PurchasesPurchase history
Usage DataProduct interaction, advertising data, app launches, taps, scrolls
DiagnosticsCrash data, performance data
SurroundingsEnvironment scanning (e.g., AR data)
BodyHands, head (e.g., hand tracking in visionOS)

Purpose Categories

PurposeDescription
Third-Party AdvertisingDisplaying third-party ads or sharing with ad networks
Developer's Advertising/MarketingYour own marketing campaigns
AnalyticsUnderstanding user behavior and measuring effectiveness
Product PersonalizationCustomizing features, content recommendations
App FunctionalityRequired for app to work (e.g., authentication, data sync)
OtherAny purpose not listed above

Tracking and Collection Definitions

"Collected" means data is transmitted off-device and accessible beyond what is needed to service the current request. On-device-only processing is NOT collection.

"Tracking" means:

  • Linking user/device data from your app with third-party data for advertising or measurement, OR
  • Sharing user/device data with a data broker

App Tracking Transparency (ATT)

Required if your app "tracks" per Apple's definition above.

  • Add NSUserTrackingUsageDescription to Info.plist (explains why tracking is needed)
  • Call ATTrackingManager.requestTrackingAuthorization() before tracking
  • Respect the result:
    • .authorized — User granted permission to track
    • .denied — User denied tracking; do not track
    • .notDetermined — User has not yet been asked
    • .restricted — Device-level restriction prevents tracking

Request at a contextually appropriate moment, not at first launch.

Common Purpose Strings (NS*UsageDescription)

These Info.plist keys must be present for each system permission your app requests:

PermissionInfo.plist Key
CameraNSCameraUsageDescription
MicrophoneNSMicrophoneUsageDescription
Photo Library (read)NSPhotoLibraryUsageDescription
Photo Library (write)NSPhotoLibraryAddUsageDescription
Location (when in use)NSLocationWhenInUseUsageDescription
Location (always)NSLocationAlwaysAndWhenInUseUsageDescription
ContactsNSContactsUsageDescription
Calendars (full access)NSCalendarsFullAccessUsageDescription
Reminders (full access)NSRemindersFullAccessUsageDescription
HealthNSHealthShareUsageDescription, NSHealthUpdateUsageDescription
MotionNSMotionUsageDescription
BluetoothNSBluetoothAlwaysUsageDescription
Face IDNSFaceIDUsageDescription
Local NetworkNSLocalNetworkUsageDescription
TrackingNSUserTrackingUsageDescription
Speech RecognitionNSSpeechRecognitionUsageDescription
Apple MusicNSAppleMusicUsageDescription

Missing purpose strings cause immediate rejection. Purpose string text must clearly explain why the permission is needed in the context of your app's functionality.

Third-Party SDK Privacy Manifests

Apple maintains a list of commonly used SDKs that require privacy manifests. Starting spring 2024, if your app includes these SDKs without privacy manifests, it will be flagged during submission.

Third-party SDKs should include their own PrivacyInfo.xcprivacy in their framework bundle. The aggregate privacy report combines all manifests from your app and embedded frameworks.

If a third-party SDK does not include a privacy manifest, you must declare its data collection in your app's privacy manifest.


Part 3: App Review Guidelines Quick Reference

For the complete guideline index (Sections 1-5), see references/app-review-guidelines.md.

Most Common Rejection Reasons

Based on Apple's published data, the most frequent rejection reasons:

RankGuidelineIssuePrevention
12.1App Completeness — bugs, crashes, placeholder contentThorough QA before submission
24.3Spam — duplicate apps, cookie-cutter templatesEnsure genuine unique value
32.3.3Inaccurate screenshotsScreenshots must match actual app
45.1.1Privacy — missing policy or purpose stringsComplete all privacy requirements
54.0Design — not meeting minimum quality barFollow HIG, test all flows
62.5.1Private API usageOnly use public APIs
73.1.1IAP required for digital goodsUse IAP for digital content
84.2Minimum functionality — app too simpleProvide genuine utility
95.1.1(v)Missing account deletionImplement full account deletion
102.3.7Wrong app categoryChoose accurate primary category

App Review Timeline

StageTypical Duration
Waiting for ReviewMinutes to hours
In ReviewMinutes to 24 hours
Total (90th percentile)Under 24 hours
Total (edge cases)Up to 7 days
Expedited ReviewSame day to 24 hours (if approved)

Review times increase during holidays and major iOS release periods. Plan submissions accordingly.


Part 4: Age Rating System

Five-Tier Rating System (Updated January 31, 2026)

RatingTriggers
4+No objectionable material
9+Infrequent or mild: profanity, cartoon/fantasy violence, horror/fear themes. Loot boxes present
13+Frequent or intense: profanity or crude humor. Infrequent: alcohol/tobacco/drugs references, sexual content/nudity, realistic violence
16+Unrestricted web access, frequent medical/treatment info, mature/suggestive themes
18+Frequent or intense: alcohol/tobacco/drugs use, sexual content/nudity, realistic violence. Simulated gambling with real-money elements
UnratedApp cannot be published without completing the questionnaire

Capability Declarations (New, WWDC25)

Apps must declare if they include these capabilities:

CapabilityWhen to Declare
Messaging/chatAny in-app messaging between users
User-generated contentUsers can post, share, or upload content visible to others
AdvertisingApp displays ads from any ad network
Parental controlsApp has parental restrictions or family features
Age assuranceApp verifies user age for restricted content

These declarations appear alongside the age rating on the App Store product page, giving parents and users additional transparency.

Regional Variations

Age ratings map differently across regions:

Apple RatingAustraliaBrazilKoreaGermany (USK)
4+4+L (All ages)All0
9+9+A1012+6
13+13+A1215+12
16+15+A1619+16
18+R 18+A1819+18

The age rating questionnaire automatically generates the appropriate regional ratings based on your answers.

Age Rating Best Practices

  • Answer the questionnaire conservatively; under-rating leads to rejection
  • If your app accesses unrestricted web content (WebView without content filter), it will be rated 16+ minimum
  • UGC apps typically need 13+ minimum due to moderation requirements
  • Simulated gambling (even without real money) requires at least 9+
  • Realistic violence in gameplay requires at least 13+

Age Rating Questionnaire Topics

The questionnaire covers these content categories:

CategoryOptions
Cartoon or Fantasy ViolenceNone, Infrequent/Mild, Frequent/Intense
Realistic ViolenceNone, Infrequent/Mild, Frequent/Intense
Profanity or Crude HumorNone, Infrequent/Mild, Frequent/Intense
Mature/Suggestive ThemesNone, Infrequent/Mild, Frequent/Intense
Alcohol, Tobacco, or Drug Use or ReferencesNone, Infrequent/Mild, Frequent/Intense
Sexual Content and NudityNone, Infrequent/Mild, Frequent/Intense
Horror/Fear ThemesNone, Infrequent/Mild, Frequent/Intense
Simulated GamblingNone, Infrequent/Mild, Frequent/Intense
Medical/Treatment InformationNone, Infrequent/Mild, Frequent/Intense
Unrestricted Web AccessYes/No

The system automatically calculates your app's age rating across all regions based on your answers.


Part 5: Export Compliance

Encryption Decision Tree

Does your app use encryption?
├── No → Set ITSAppUsesNonExemptEncryption = NO in Info.plist → Done
├── Only HTTPS/TLS/URLSession?
│   ├── Yes → Exempt, set ITSAppUsesNonExemptEncryption = NO → Done
│   │         (May need annual self-classification report to BIS)
│   └── No (custom encryption) →
│       Set ITSAppUsesNonExemptEncryption = YES →
│       Upload compliance documentation to App Store Connect →
│       Receive encryption compliance code →
│       Set ITSEncryptionExportComplianceCode in Info.plist → Done

Info.plist Keys

<!-- Most apps: HTTPS only -->
<key>ITSAppUsesNonExemptEncryption</key>
<false/>

<!-- Apps with custom encryption -->
<key>ITSAppUsesNonExemptEncryption</key>
<true/>
<key>ITSEncryptionExportComplianceCode</key>
<string>YOUR_COMPLIANCE_CODE</string>

Exempt Encryption Uses

These are exempt from export documentation (but may still require annual self-classification):

  • HTTPS/TLS (URLSession, Network.framework, WKWebView)
  • Secure Enclave operations (biometric auth, Keychain)
  • Apple's built-in encryption frameworks (CryptoKit, Security.framework) when used per Apple documentation
  • Password hashing (bcrypt, scrypt, PBKDF2)

Non-Exempt Encryption Uses

These require compliance documentation:

  • Custom encryption algorithms
  • Open-source encryption libraries (OpenSSL, libsodium) used for non-standard purposes
  • End-to-end encrypted messaging
  • VPN implementations
  • Custom DRM systems

Part 6: Account and Authentication

Account Deletion (Required Since June 2022)

Apps that support account creation must offer account deletion. Requirements:

RequirementDetails
Full deletionMust fully delete the account, not just deactivate
Easy to findMust be accessible from app settings; not buried behind support tickets
Inform timelineTell user how long deletion takes
Confirm completionNotify user when deletion is complete
Delete shared UGCMust handle user-generated content shared with others
Revoke SIWA tokensCall Apple's revoke token endpoint for Sign in with Apple accounts
Handle subscriptionsWarn about active subscriptions; direct to subscription management

Sign in with Apple Token Revocation

// Server-side: revoke SIWA tokens when account deleted
// POST https://appleid.apple.com/auth/revoke
// Parameters: client_id, client_secret, token, token_type_hint

Failing to revoke SIWA tokens during account deletion is a common rejection reason.

Sign in with Apple (Guideline 4.8)

Required when: Your app offers ANY third-party or social login option (Google, Facebook, Twitter, email/password via third-party provider).

Exceptions — SIWA not required when

  • App is for company employees only (internal enterprise app)
  • App is for education or enterprise with existing institutional auth
  • App uses government or industry-backed citizen ID systems
  • App is a client for a specific third-party service (e.g., Gmail app, Slack)

When SIWA is required, it must be offered as an equally prominent option alongside other sign-in methods. It cannot be hidden or given less visual weight.

Account Deletion Implementation Checklist

StepDetails
1. Add UI entry pointSettings screen, clearly labeled "Delete Account"
2. Explain consequencesShow what will be deleted (data, subscriptions, purchases)
3. Require confirmationUser must explicitly confirm deletion
4. Handle active subscriptionsDirect user to cancel active subscriptions before deletion
5. Process deletionDelete all user data from your servers
6. Revoke SIWA tokensCall Apple's revoke endpoint if SIWA was used
7. Confirm to userSend email or in-app confirmation when deletion is complete
8. Define timelineState how long deletion takes (immediately, 30 days, etc.)

Apple specifically rejects apps that:

  • Require users to call a phone number to delete their account
  • Require users to send an email to request deletion
  • Only offer account deactivation (hiding profile) instead of full deletion
  • Don't handle SIWA token revocation

Part 7: Monetization and IAP

IAP Submission Pipeline

In-app purchases have a separate review process from app submissions:

ScenarioBehavior
First IAP everMust be bundled with a new app version submission
Subsequent IAPsCan be submitted independently of app updates
IAP metadata changeSubmitted for review independently
IAP price changeTakes effect without review

Required IAP Metadata

FieldRequiredNotes
Reference NameYesInternal name (not visible to users)
Product IDYesUnique, cannot be reused after deletion
TypeYesConsumable, non-consumable, auto-renewable, non-renewing
PriceYesSelect from Apple's price tiers
Display NameYesLocalizable, shown to users
DescriptionYesLocalizable, shown to users
ScreenshotYesOne screenshot showing the IAP in context
Review NotesNoExplain what the IAP unlocks

IAP Status Flow

Missing Metadata → Ready to Submit → Waiting for Review → In Review → Approved
                                                                    → Rejected

IAP must be in "Ready to Submit" status before it can be included in an app submission.

Subscription Rules (Guideline 3.1.2)

RuleDetails
Ongoing valueSubscriptions must provide continuing value over time
Minimum duration7 days minimum subscription period
Cross-deviceMust work across all user's devices where app is available
Transparent termsClearly state price, duration, auto-renewal, and cancellation
No removing featuresCannot remove previously paid functionality to force subscription
Grace periodSupport billing grace period (user retains access during retry)
Upgrade/downgradeMust support plan changes within subscription group

Loot Boxes (Guideline 3.1.1)

Apps offering loot boxes or random item mechanics must disclose the odds of receiving each type of item before purchase.

External Payment Eligibility

CategoryGuidelineWhat's Allowed
Reader apps3.1.3(a)Link to website for previously purchased content (magazines, newspapers, books, audio, music, video)
Multiplatform services3.1.3(b)Cross-platform subscriptions (e.g., Netflix, Spotify)
Enterprise services3.1.3(c)B2B apps for organizations, not individual consumers
Person-to-person3.1.3(d)Real-time one-to-one services (tutoring, consulting, ride-sharing)
Physical goods/services3.1.3(e)Goods consumed outside the app (food delivery, clothing, physical subscriptions)

Apps in these categories may accept payment outside the IAP system.

Subscription Group Architecture

ConceptDetails
Subscription GroupCollection of related subscription tiers (e.g., Basic, Pro, Premium)
Service LevelRank within a group; determines upgrade/downgrade behavior
UpgradeMoving to higher service level (immediate, prorated)
DowngradeMoving to lower service level (effective at next renewal)
CrossgradeSame service level, different duration (monthly ↔ annual)
Family SharingCan be enabled per subscription group

Subscription Pricing

FeatureDetails
Price tiersApple provides 900+ price points across 175+ storefronts
Price equalizationApple auto-equalizes prices across currencies
Custom pricingSet custom prices per storefront
Introductory offersFree trial, pay-as-you-go, pay-up-front
Promotional offersFor existing/lapsed subscribers; requires server-signed JWS
Win-back offersFor lapsed subscribers; displayed by system automatically
Offer codesDistributable codes for free/discounted access

Subscription Restore Purchases

All subscription apps must implement Restore Purchases functionality. This is tested during App Review. Implement via:

try await AppStore.sync()

If Restore Purchases is missing or non-functional, the app will be rejected.

Free Trial Best Practices

PracticeDetails
Duration displayClearly show trial length before user commits
Post-trial pricingShow what price will be charged after trial ends
CancellationExplain how to cancel before trial ends
No dark patternsDon't make cancellation difficult or hard to find
ReminderConsider sending a push notification before trial ends

Part 8: EU-Specific Compliance

Digital Services Act (DSA) Trader Status

Applies to: ALL apps distributed in the EU (27 member states)

Timeline: Since February 17, 2025, apps without declared trader status are subject to removal from the EU App Store.

What is Trader Status?

A self-assessment: are you acting as a "trader" (selling goods/services to EU consumers) or a non-trader (hobby, open-source, non-commercial)? Apple cannot determine this for you.

Trader Requirements

If you declare as a trader, you must provide:

FieldRequiredVerification
Legal nameYes
AddressYes
Phone numberYesVerified via 2FA
Email addressYesVerified via 2FA
Company registrationWhere applicable
VAT IDWhere applicable

This contact information is displayed on your EU product page.

Declaring in App Store Connect

App Store Connect > Users and Access > Developer Profile > Trader Status

Select your trader status for each app. If you have both paid and free apps, each app may have a different trader classification.

EU Alternative Distribution

Under the Digital Markets Act (DMA), Apple allows alternative app distribution in the EU:

  • Alternative app marketplaces
  • Web distribution (notarized apps)
  • Alternative payment processing

These require separate business terms (Alternative Terms Addendum) and additional compliance steps. See Apple's EU developer documentation for details.

EU 27 Member States

Apps distributed in any of these territories require DSA compliance:

Austria, Belgium, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden.

If your app is available in "All Territories" (the default), it is available in the EU and DSA compliance is required.


Part 9: Build Upload and Processing

Upload Methods

MethodBest For
Xcode (recommended)Most developers; integrated with Archive workflow
Xcode CloudCI/CD with automatic builds and distribution
TransporterStandalone macOS app for batch uploads
altool (CLI)Scripted CI/CD pipelines
App Store Connect APIFully automated workflows

Build Identifiers

IdentifierPurposeExampleRules
Bundle IDUniquely identifies your appcom.company.appSet once, cannot change
Version NumberUser-facing version2.1.0Must increment for each release
Build StringDistinguishes builds of same version2.1.0.42Must be unique per version per platform

Build Selection

  • Only one build can be selected per version
  • Build selection can be changed until the version is submitted for review
  • "Missing Compliance" status blocks build selection until export compliance questions are answered

SDK Requirements

Effective DateRequirement
April 2025 (current)Xcode 16, iOS 18 SDK
April 28, 2026 (upcoming)Xcode 26, iOS 26 SDK

Apps built with outdated SDKs will be rejected after the effective date for new submissions. Existing apps on the store are not affected until they submit an update.

Build Processing

After upload, Apple processes your build:

  1. Upload — Binary transferred to Apple (5-30 minutes depending on size)
  2. Processing — Apple validates binary, runs automated checks (15-60 minutes)
  3. Available — Build appears in App Store Connect, ready for TestFlight or submission
  4. Email notification — Sent when processing completes or fails

Common processing failures:

  • Missing required architectures (arm64 required)
  • Invalid provisioning profile or signing identity
  • Missing privacy manifest for third-party SDKs on Apple's list
  • Info.plist missing required keys
  • Binary too large (OTA download limit: 200 MB over cellular)

IPv6 Compatibility

All apps must work on IPv6-only networks. Apple's review environment uses IPv6. Common issues:

  • Hard-coded IPv4 addresses
  • Using low-level socket APIs instead of high-level networking
  • Third-party SDKs with IPv4-only code

Use URLSession or Network.framework to ensure IPv6 compatibility automatically.

App Thinning and Bitcode

TopicStatus
BitcodeDeprecated since Xcode 14; no longer accepted
App ThinningActive; Apple generates device-specific variants
On-Demand ResourcesActive; tag resources for download on demand
Asset catalogsUsed for app thinning of images (1x/2x/3x)

Entitlements and Capabilities

Certain features require entitlements configured in Xcode and provisioning profiles:

CapabilityEntitlementCommon Issues
Push Notificationsaps-environmentCertificate expiry, missing provisioning
App Groupscom.apple.security.application-groupsShared container ID mismatch
Associated Domainscom.apple.developer.associated-domainsAASA file not served correctly
HealthKitcom.apple.developer.healthkitMissing required capabilities
Background ModesUIBackgroundModesUsing modes without justification
Sign in with Applecom.apple.developer.applesigninMissing from provisioning profile
CloudKitcom.apple.developer.icloud-servicesContainer ID mismatch
In-App PurchaseEnabled by default; StoreKit config needed for testing

TestFlight Submission

TestFlight builds also go through a review process, though lighter than App Store:

AspectInternal TestingExternal Testing
TestersUp to 100 App Store Connect usersUp to 10,000 external testers
Review requiredNoYes (first build per version)
Review timeUsually under 24 hours
Duration90 days from upload90 days from upload
GroupsOrganize testers into groups
FeedbackCrash reports onlyScreenshots, feedback, crash reports

Part 10: WWDC25 Changes

Draft Submissions (WWDC 2025-328)

Group multiple items into a single draft submission:

  • App version + new IAPs + product page changes
  • Review everything together instead of separate submissions
  • Draft state: prepare items over time, submit when ready

Reusable Build Numbers on Failure

When a build is rejected due to metadata issues (not binary issues), you can reuse the same build without re-uploading. Previously, rejected builds required a new build string.

Builds Retained After Error Rejection

Builds are no longer removed from App Store Connect after certain rejection types. You can fix metadata issues and resubmit with the same build.

Accessibility Nutrition Labels

New App Store metadata for accessibility features:

  • Declare which accessibility features your app supports
  • Displayed on your App Store product page
  • Categories include VoiceOver support, Dynamic Type, Switch Control, etc.
  • Helps users find apps that meet their accessibility needs

App Store Tags (LLM-Generated, Editable)

Apple generates descriptive tags for your app using AI:

  • Tags appear on your product page
  • You can review and edit suggested tags
  • Tags improve discoverability in search
  • Based on app metadata, description, and functionality

Custom Product Page Keywords

Product pages can now have unique keywords:

  • Different keywords per custom product page
  • Improves targeting for different audiences
  • Each custom page can appear in different search results

Offer Codes Expanded

Offer codes now support all IAP types:

  • Consumables
  • Non-consumables
  • Non-renewing subscriptions
  • Auto-renewable subscriptions (existing)

Review Summaries (AI-Generated)

Apple generates AI summaries of user reviews:

  • Summarizes common themes across reviews
  • Displayed on the product page
  • Updated as new reviews come in
  • Helps users quickly understand app quality and common feedback

Analytics Enhancements

100+ new analytics metrics including:

  • Pre-order conversion funnels
  • Custom product page performance comparison
  • Subscription lifecycle metrics (trial to paid conversion, churn timing)
  • Peer group benchmarking (compare performance against similar apps)
  • Download source attribution refinements

Age Rating Overhaul

Five-tier system with new capability declarations (see Part 4 for full details).

Custom Product Pages (Existing, Enhanced in WWDC25)

Custom product pages allow different App Store presentations for different audiences:

FeatureDetails
MaximumUp to 35 custom product pages per app
CustomizableScreenshots, app previews, promotional text
NOT customizableApp name, icon, description, What's New
URLUnique URL per custom page for attribution
KeywordsNew in WWDC25: unique keywords per custom product page
AnalyticsImpressions, downloads, conversion rates per page

App Store Pricing Changes

FeatureDetails
900+ price pointsExpanded from original 87 tiers
Global equalizationAutomatic currency conversion with regional pricing
Custom pricingOverride auto-equalization for specific storefronts
Price increasesExisting subscribers notified; must consent for >50% increase
Regional pricingSet prices optimized for each market's purchasing power

Expert Review Checklist

For the comprehensive 9-section submission checklist, see references/expert-review-checklist.md. For the discipline-focused pre-flight workflow, see app-store-submission.


Troubleshooting

10 Common Submission Issues

#IssueCauseFix
1"Missing Compliance" on buildExport compliance questions not answeredApp Store Connect > build > answer encryption questions
2Build not appearing in ASCProcessing delay or failureWait 15-60 min; check email for processing errors
3"Add for Review" button grayedMissing required metadataCheck all required fields in App Information and Version Information
4Screenshots wrong sizeDevice spec mismatchUse exact pixel dimensions for each device size class
5Privacy policy URL invalidNot HTTPS or not publicly accessibleMust be https:// URL accessible without login
6IAP not available for reviewIAP not in "Ready to Submit" statusComplete all IAP metadata including screenshot; set status
7Age rating warningsQuestionnaire incomplete or capabilities not declaredComplete questionnaire; answer new capability questions
8DSA trader status incompleteEmail or phone not verifiedComplete 2FA verification for both email and phone
9Build string conflictDuplicate build string for same versionEach build upload must have a unique build string
10"In Review" for extended periodComplex review or holiday backlog90% of apps reviewed in <24h; use expedited review for critical/urgent issues

Expedited Review

Request via App Store Connect when:

  • Critical bug fix affecting many users
  • Security vulnerability patch
  • Time-sensitive event (holiday sale, product launch)
  • Legal or government compliance deadline

Apple reviews expedited requests case-by-case. Not guaranteed. Provide clear justification.

Rejection Response Options

OptionWhen to UseHow
Fix and resubmitIssue is clear and fixableFix the issue, upload new build or update metadata, resubmit
Reply in Resolution CenterNeed clarification or want to explainApp Store Connect > Resolution Center
AppealBelieve rejection is incorrectApp Review Board appeal via Resolution Center
Contact App ReviewNeed guidance on a specific guidelinePhone or online request

Resolution Center Best Practices

  • Respond within 14 days (submissions auto-expire after that)
  • Be specific about what you changed to address the rejection
  • Include screenshots if the fix is visual
  • Reference specific guideline numbers when explaining compliance
  • If appealing, provide factual evidence, not emotional arguments

App Store Connect API for Submissions

For automated submission workflows:

EndpointPurpose
POST /v1/appStoreVersionsCreate new version
PATCH /v1/appStoreVersions/{id}Update version metadata
POST /v1/appStoreVersionSubmissionsSubmit version for review
GET /v1/apps/{id}/appStoreVersionsList all versions
POST /v1/appScreenshotsUpload screenshots
POST /v1/appPreviewsUpload app preview videos
GET /v1/apps/{id}/buildsList processed builds

Authentication requires an API key from App Store Connect (Users and Access > Integrations > App Store Connect API).

Pre-Submission Testing Checklist

TestWhat to Verify
Fresh installApp works on clean device with no prior data
Upgrade pathApp works when upgrading from previous version
Network conditionsApp handles offline, slow, and interrupted connections
Low storageApp handles low disk space gracefully
Background/foregroundApp resumes correctly from background
AccessibilityVoiceOver navigation works for all key flows
All device sizesUI adapts to smallest and largest supported devices
Dark modeUI renders correctly in both light and dark appearance
All supported languagesNo truncation or layout issues in localized versions
Permission denialApp handles denied permissions without crashing
IAP restoreRestore Purchases works on fresh device
Account deletionFull account deletion flow works end to end

Resources

WWDC: 2022-10166, 2025-224, 2025-241, 2025-252, 2025-328

Docs: /app-store/review/guidelines, /app-store/submitting, /app-store/app-privacy-details, /help/app-store-connect

Skills: app-store-submission, app-store-diag, privacy-ux, storekit-ref, accessibility-diag

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

ads-competitor

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ads-meta

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ads-tiktok

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

blog-write

No summary provided by upstream source.

Repository SourceNeeds Review