Skip to main content

Preparing for App Store

1. Creating App Store Connect Account

Example: Registering for App Store Connect

// Navigate to App Store Connect and register as a developer
// Fill in required information:
// - Legal name
// - Address
// - Tax ID
// - Bank account details
// - Contact information
Step Description Notes
1. Visit App Store Connect Go to https://appstoreconnect.apple.com Use Apple ID to sign in
2. Create Developer Account Complete the registration form with legal and financial details Requires valid tax ID and bank account
3. Verify Email Check email for verification link Must confirm email address to proceed
4. Accept Terms Review and accept the App Store Connect agreement Read carefully before accepting
Note: You must be an individual or company with a valid tax ID to register for App Store Connect.
Warning: Ensure all financial and legal information is accurate to avoid delays in app approval.

2. Preparing App Icons and Screenshots

Example: App Icon Sizes

// App Icon Asset Catalog Entries
// 1024x1024px (for App Store)
// 180x180px (iPhone Spotlight & Settings)
// 167x167px (iPad App)
// 152x152px (iPad Spotlight)
// 120x120px (iPhone Spotlight)
// 80x80px (iPad Settings)
// 76x76px (iPad Spotlight)
// 58x58px (iPhone Settings)
// 40x40px (iPhone Spotlight & Settings)
// 29x29px (iPhone Settings)
Size (px) Usage File Name
1024x1024 App Store AppIcon-1024.png
180x180 iPhone Spotlight & Settings AppIcon-180.png
167x167 iPad App AppIcon-167.png
152x152 iPad Spotlight AppIcon-152.png
120x120 iPhone Spotlight AppIcon-120.png
80x80 iPad Settings AppIcon-80.png
76x76 iPad Spotlight AppIcon-76.png
58x58 iPhone Settings AppIcon-58.png
40x40 iPhone Spotlight & Settings AppIcon-40.png
29x29 iPhone Settings AppIcon-29.png
Note: All icons must be in PNG format with no transparency.

Example: Screenshot Requirements

// Screenshot Requirements
// Device: iPhone 14 Pro Max (1292x2796)
// Resolution: 100% scale
// Format: PNG or JPEG (PNG preferred)
// Size: 1292x2796 px
// Orientation: Portrait only
Device Resolution (px) Orientation Format
iPhone 14 Pro Max 1292x2796 Portrait PNG or JPEG
iPhone 13 Pro Max 1292x2796 Portrait PNG or JPEG
iPhone 12 Pro Max 1292x2796 Portrait PNG or JPEG
iPad Pro (12.9-inch) 2048x2732 Portrait PNG or JPEG
iPad Air (10.9-inch) 1768x2352 Portrait PNG or JPEG
Warning: Screenshots must not contain any text or UI elements that are not part of the app's actual interface.

3. Writing App Description and Metadata

Field Description Requirements
App Name Primary name of the app as it appears in the App Store Must be 30 characters or less; cannot contain special characters
Subtitle Short description (up to 30 characters) shown below the app name Optional; helps with discoverability
Description Full app description (up to 4000 characters) Must be in English; includes keywords for search
Keywords Comma-separated list of search terms Up to 100 characters; helps with app discoverability
Privacy Policy URL Link to the app’s privacy policy Required if app collects user data
Support URL Link to support page or contact form Recommended for user assistance
Marketing URL Link to marketing page or promotional content Optional; enhances app presentation

Example: App Description Formatting

# App Name

This is a powerful app that helps users manage their daily tasks efficiently.

## Features
- Task creation and organization
- Reminder notifications
- Sync across devices

## Privacy Policy
For more information, please visit our [privacy policy](https://example.com/privacy).
Note: App descriptions should be compelling and highlight key features without being too promotional.
Warning: Avoid using phrases like “best app ever” or “most popular,” as they may violate App Store Review Guidelines.

4. Configuring App Privacy Information

Note: Starting with iOS 14, Apple requires apps to declare the data they collect and how it's used.
Field Description Value
NSPrivacyCollectedDataTypes Specifies the types of data your app collects NSPrivacyCollectedDataTypes array with one or more of the following values:
  • NSPrivacyCollectedDataTypeAnalytics
  • NSPrivacyCollectedDataTypeCrashData
  • NSPrivacyCollectedDataTypeDebugData
  • NSPrivacyCollectedDataTypePreciseLocation
  • NSPrivacyCollectedDataTypeUserContent
NSPrivacyCollectedDataLinking Indicates whether the app links collected data to a user identity YES or NO
NSPrivacyAccessedAPITypes Lists the APIs accessed by your app that may involve privacy data NSPrivacyAccessedAPITypes array with one or more of the following:
  • NSPrivacyAccessedAPITypeAppTracking
  • NSPrivacyAccessedAPITypeCalendar
  • NSPrivacyAccessedAPITypeCamera
  • NSPrivacyAccessedAPITypeContacts
  • NSPrivacyAccessedAPITypeFaceID
  • NSPrivacyAccessedAPITypeFileProvider
  • NSPrivacyAccessedAPITypeHomeKit
  • NSPrivacyAccessedAPITypeMediaLibrary
  • NSPrivacyAccessedAPITypeMotion
  • NSPrivacyAccessedAPITypePhotoLibrary
  • NSPrivacyAccessedAPITypeSiri
  • NSPrivacyAccessedAPITypeSpeechRecognition
  • NSPrivacyAccessedAPITypeStorage
  • NSPrivacyAccessedAPITypeSystemSettings
  • NSPrivacyAccessedAPITypeTracking
  • NSPrivacyAccessedAPITypeVideoLibrary
  • NSPrivacyAccessedAPITypeVoiceTrigger
NSPrivacyTracking Indicates whether the app uses tracking technologies YES or NO
NSPrivacyTrackingParameters Provides details about tracking parameters if NSPrivacyTracking is YES
{
    "NSPrivacyTrackingParameters": {
        "NSPrivacyTrackingParameterType": "ThirdParty",
        "NSPrivacyTrackingParameterDescription": "App uses third-party tracking services"
    }
}

Example: App Privacy Manifest Configuration

import Foundation

// In your app's Info.plist, add the following keys:
let privacyManifest = [
    "NSPrivacyCollectedDataTypes": ["NSPrivacyCollectedDataTypeAnalytics", "NSPrivacyCollectedDataTypePreciseLocation"],
    "NSPrivacyCollectedDataLinking": "YES",
    "NSPrivacyAccessedAPITypes": ["NSPrivacyAccessedAPITypeCalendar", "NSPrivacyAccessedAPITypeCamera"],
    "NSPrivacyTracking": "YES",
    "NSPrivacyTrackingParameters": [
        "NSPrivacyTrackingParameterType": "ThirdParty",
        "NSPrivacyTrackingParameterDescription": "App uses third-party tracking services"
    ]
]

Privacy Manifest Requirements

  • Every app that collects data or accesses privacy-sensitive APIs must include a PrivacyInfo.xcprivacy file
  • Include all data types collected and APIs accessed
  • Declare tracking behavior clearly

5. Creating App Store Provisioning Profile

Example: Xcode App Store Provisioning Profile Setup

// In Xcode, navigate to:
// Xcode > Preferences > Accounts
// Select your Apple ID and click "Manage Certificates"
// Click the "+" button to add a new provisioning profile
// Choose "App Store" as the distribution method
Profile Type Description Usage
App Store Used for distributing apps to the App Store Required for App Store submission
Development Used for testing on physical devices For internal testing and development
Ad Hoc Used for distributing apps to specific devices For beta testing with a limited set of devices
Note: The App Store provisioning profile must be created in the Apple Developer portal and downloaded to your local machine before uploading to App Store Connect.
Warning: Ensure that the App Store provisioning profile matches the bundle identifier of your app.

Steps to Create App Store Provisioning Profile

  • Log in to the Apple Developer portal
  • Navigate to Certificates, Identifiers & Profiles
  • Select "Provisioning Profiles" and click the "+" button
  • Choose "App Store" as the distribution method
  • Select your App ID and certificate
  • Download the provisioning profile to your local machine

6. Archiving App for Distribution

Step Description Action
1. Configure Build Settings Set the build configuration to Release mode Build Configuration = Release
2. Set Deployment Target Ensure deployment target matches App Store requirements Deployment Target = iOS 12.0
3. Code Signing Assign valid provisioning profile and certificate Code Signing Identity = iPhone Distribution: <Developer Name>
4. Archive App Use Xcode to archive the project Xcode > Product > Archive

Example: Archive Command via Terminal

xcodebuild -scheme MyScheme -configuration Release archive -archivePath /path/to/MyApp.xcarchive
Note: The archive includes all necessary binaries and metadata for App Store submission.
Warning: Ensure all app icons and launch screens meet App Store guidelines before archiving.

7. Uploading Build to App Store Connect

Example: Archive and Upload via Xcode

// 1. Archive the app in Xcode
// Product > Archive

// 2. Validate and upload to App Store Connect
// In Organizer window, select archive > Validate > Upload
Step Description Notes
Archive Xcode > Product > Archive Creates a .xcarchive file
Validate Organizer > Validate Checks for common issues before upload
Upload Organizer > Upload to App Store Connect Sends build to Apple's servers
Note: Ensure your app's Bundle Identifier matches the one registered in App Store Connect.
Warning: Builds must be uploaded using the same Apple ID used to register the app in App Store Connect.

8. Managing App Versions and Builds

Field Description Value
CFBundleShortVersionString Marketing version shown to users 1.2.0
CFBundleVersion Build number incremented for each release 12345

Example: Setting Version in Info.plist

<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>12345</string>
Note: CFBundleShortVersionString is what users see in the App Store, while CFBundleVersion must be incremented for each submission.

Example: Using Xcode Build Settings

PRODUCT_VERSION = 1.2.0
BUILD_NUMBER = 12345

9. Submitting App for Review

Step Description Details
1. Prepare App Store Connect Set up app metadata and build Upload build, fill in app information, screenshots, and descriptions in App Store Connect.
2. Review App Information Verify all app details Check app name, description, keywords, category, and support URL for accuracy.
3. Submit for Review Initiate review process Click "Submit for Review" in App Store Connect after confirming all details are correct.

Example: App Store Connect Submission

#!/bin/bash
# Example script to upload build using Transporter
xcrun altool --validate-app -f <path-to-build>.ipa -t ios --apiKey <API-Key> --apiIssuerId <Issuer-ID>
xcrun altool --upload-app -f <path-to-build>.ipa -t ios --apiKey <API-Key> --apiIssuerId <Issuer-ID>
Note: Ensure your app meets all App Store Review Guidelines before submission.
Warning: Once submitted, you cannot make changes to the app's metadata or binary. Make sure everything is correct before submitting.

10. Handling App Review Feedback

Feedback Type Description Action Required
Rejection Reason App rejected due to policy violations or technical issues Review rejection notes and address all issues before resubmitting
Request for Information App requires additional details or clarification from developer Provide requested information within 24 hours to avoid delay
Guideline Violation App does not comply with App Store Review Guidelines Fix the violation and resubmit for review

Example: Resubmitting After Rejection

import Foundation

// After addressing feedback, resubmit app using Xcode or Transporter
func resubmitApp() {
    print("App updated and ready for resubmission")
    // Ensure all metadata is correct
    // Submit via App Store Connect or Xcode
}
Note: Apple provides detailed feedback in App Store Connect. Address all issues before resubmitting to avoid further delays.

11. Managing App Updates and Releases

Step Action Description
1 Archive Archive your app in Xcode to prepare for submission.
2 Validate Validate the archive before uploading to App Store Connect.
3 Upload Upload the validated archive to App Store Connect.
4 Release Submit the app for review or release it manually.

Example: Archive and Upload via Terminal

xcodebuild -workspace MyApp.xcworkspace -scheme MyApp archive -archivePath /tmp/MyApp.xcarchive
xcodebuild -exportArchive -archivePath /tmp/MyApp.xcarchive -exportPath /tmp/MyApp -exportFormat ipa
Note: Ensure your app's CFBundleVersion is incremented for each release.
Warning: App Store Connect requires all apps to be built with the latest SDK.
Release Type Description Status
Manual Release App is released after review approval. NEW
Automatic Release App is released immediately after approval. DEPRECATED

Was this article helpful?