How to publish an app to the Apple App Store

A complete end-to-end guide covering Apple Developer accounts, certificates, provisioning profiles, App Store Connect, signing, and submission.

Publishing an iOS/iPadOS/macOS app to the Apple App Store involves several moving parts: an Apple Developer account, certificates, provisioning profiles, App Store Connect metadata, and the Xcode archive/upload workflow. This guide walks you through every step from zero to live on the store.


Table of contents

  1. Prerequisites
  2. Create an Apple Developer account
  3. Create an App ID
  4. Create a distribution certificate
  5. Create a provisioning profile
  6. Configure your project in Xcode
  7. Prepare App Store Connect
  8. Archive and upload
  9. Submit for review
  10. Post-release: updates & maintenance
  11. Troubleshooting

Prerequisites


1. Create an Apple Developer account

  1. Go to https://developer.apple.com and sign in with your Apple ID.
  2. Click Join the Apple Developer Program.
  3. Enroll as either an Individual or an Organization:
    • Individual — your personal legal name appears as the seller. Simplest option for solo devs.
    • Organization — requires a D-U-N-S number from Dun & Bradstreet (free) and legal entity verification. Your company name appears as the seller.
  4. Pay the $99 USD/year membership fee.
  5. Wait for verification (usually within 24 hours, up to 48 for organizations).

Tip: You can test on-device with a free Apple ID (sideloading via Xcode), but you must have a paid membership to distribute on the App Store.


2. Create an App ID

An App ID uniquely identifies your app in Apple’s ecosystem.

  1. Go to Certificates, Identifiers & Profiles.
  2. Click Identifiers → + (plus button).
  3. Select App IDs and click Continue.
  4. Description — a human-readable label (e.g. “My Awesome App”).
  5. Bundle ID — choose Explicit and enter a reverse-domain identifier, e.g. com.yourdomain.myawesomeapp. This must match the bundle identifier in your Xcode project.
  6. Under Capabilities, enable any entitlements your app uses (Push Notifications, Sign in with Apple, App Groups, etc.).
  7. Click Register.

3. Create a distribution certificate

Certificates let Apple verify that the app was built by you. You need a Distribution Certificate for App Store builds.

Xcode can automatically create and manage certificates and profiles:

  1. In Xcode → Settings → Accounts, add your Apple ID.
  2. Select your team → click Manage Certificates.
  3. Click +Apple Distribution.
  4. Xcode creates the certificate and installs it in your Keychain.

Option B: Manual creation

  1. Open Keychain Access → Keychain Access → Certificate Assistant → Request a Certificate from a Certificate Authority…
  2. Enter your email and common name, choose Saved to disk, and save the .certSigningRequest file.
  3. Go to Certificates, Identifiers & Profiles → Certificates.
  4. Click + → choose Apple Distribution → Continue.
  5. Upload the .certSigningRequest file.
  6. Download the generated .cer file and double-click it to install in Keychain.

Important: The private key is generated in your Keychain at step 2. If you lose it or your Mac dies, you cannot revoke and re-create the same certificate without invalidating existing profiles. Back up your private key (export as .p12 from Keychain Access) and store it securely.


4. Create a provisioning profile

A provisioning profile ties together your App ID, certificate, and (for Ad-Hoc/Development) device UDIDs.

  1. Go to Certificates, Identifiers & Profiles → Profiles.
  2. Click + → select App Store under Distribution → Continue.
  3. Select the App ID you created in step 2 → Continue.
  4. Select your distribution certificate → Continue.
  5. Profile Name — e.g. “My Awesome App AppStore Profile”.
  6. Click Generate, then Download the .mobileprovision file.
  7. Double-click the file to install it in Xcode.

Note: If you let Xcode manage signing (step 5), profiles are created automatically. You only need manual profiles if you’re using advanced CI/CD setups.


5. Configure your project in Xcode

Bundle identifier

  1. Open your project in Xcode.
  2. Select the target → Signing & Capabilities tab.
  3. Team — select your Apple Developer team.
  4. Bundle Identifier — must exactly match the App ID you registered (e.g. com.yourdomain.myawesomeapp).

Automatic vs Manual signing

Version and build numbers

Required settings

Ensure your Info.plist or project settings include:

Key Value
NSAppTransportSecurity Configure if your app talks to HTTP (non-HTTPS) endpoints
UIApplicationSceneManifest Required for iOS 13+ scene-based lifecycle
Privacy – Camera Usage Description If your app uses the camera
Privacy – Location When In Use Usage Description If your app requests location
ITSAppUsesNonExemptEncryption Set to NO if your app doesn’t use custom encryption, to speed up export compliance review

App icons and launch screen


6. Prepare App Store Connect

App Store Connect is where you manage metadata, screenshots, pricing, and submissions.

Create the app record

  1. Go to App Store Connect.
  2. Click My Apps → + → New App.
  3. Fill in:
    • Platforms — iOS (or others).
    • Name — your app’s display name on the store.
    • Primary Language — determines the default language for metadata.
    • Bundle ID — select the App ID you registered.
    • SKU — a unique internal identifier (e.g. myawesomeapp2026).
  4. Click Create.

Fill in metadata

Navigate to your app → App Information and fill in all required fields:

Section Details
App Information Category, subcategory, content rights
Pricing and Availability Price tier, availability regions
Privacy Privacy policy URL, data collection declarations
App Review Information Contact info, notes for reviewers, demo account if login is required

Screenshots

You must provide screenshots for every device size you support. Required sizes:

Device Dimensions (portrait)
iPhone 6.9" (iPhone 15 Pro Max) 1290 × 2796 px
iPhone 6.7" (iPhone 14 Plus) 1284 × 2778 px
iPhone 6.5" 1284 × 2778 px
iPhone 5.5" 1242 × 2208 px
iPad 12.9" 2048 × 2732 px
iPad 11" 1668 × 2388 px

Tip: Use Xcode’s simulator to take screenshots, or use tools like fastlane snapshot to automate the process. You can also drag a 6.9" screenshot and App Store Connect will scale it for other sizes if you check “Use same screenshot for all iPhone sizes.”

App description and keywords


7. Archive and upload

Archive the app

  1. Connect a physical device or select Any iOS Device as the run destination (required for archiving).
  2. In Xcode: Product → Archive.
  3. Wait for the build to complete. The Organizer window opens.
  4. Verify the archive: check version, build number, and that the right provisioning profile was used.

Upload to App Store Connect

  1. In the Organizer, click Distribute App.
  2. Choose App Store ConnectUpload.
  3. Configure upload options:
    • Upload your app’s symbols — recommended for crash symbolication.
    • Manage Version and Build Number — let Xcode auto-increment if needed.
  4. Click Distribute and wait for the upload to complete.
  5. App Store Connect processes the build (typically 5–30 minutes). You’ll receive an email when it’s ready.

Alternative: Use xcodebuild and xcrun altool or the new xcrun notarytool for command-line uploads. See the CI/CD section below.

Common upload errors

Error Fix
“Invalid signature” Re-generate your distribution certificate or provisioning profile
“Missing required icon” Ensure 1024×1024 icon is in the asset catalog
“Invalid Bundle Identifier” Bundle ID must match App Store Connect and Developer Portal exactly
“Build number conflict” Increment the build number in Xcode

8. Submit for review

  1. In App Store Connect, go to your app → App Store tab.
  2. Select (or create) a version.
  3. Choose the uploaded build under Build section.
  4. Complete all required metadata fields (description, keywords, screenshots, etc.).
  5. Answer the Export Compliance question (usually “No” if you’re not using custom encryption beyond standard HTTPS).
  6. Click Add for Review.

Review timeline

Common rejection reasons


9. Post-release: updates & maintenance

Releasing an update

  1. Increment Version and Build numbers in Xcode.
  2. Archive and upload the new build.
  3. In App Store Connect, create a new version or add the build to the existing version.
  4. Fill in What’s New.
  5. Submit for review.

Managing certificates over time

Phased release

App Store Connect supports phased releases — rolling out updates to 1%, 2%, 5%, 10%, 20%… of users over 7 days. Enable this under Phased Release in the version section.


CI/CD with fastlane

For teams and automation, fastlane is the industry standard:

# Install fastlane
gem install fastlane

# Initialize in your project
fastlane init

# Common commands
fastlane match          # Sync certificates & profiles across team
fastlane snapshot       # Automated screenshots
fastlane gym            # Build and archive
fastlane deliver        # Upload metadata & screenshots to App Store Connect
fastlane pilot          # Distribute TestFlight builds

Example Fastfile lane

default_platform(:ios)

platform :ios do
  desc "Build and upload to App Store Connect"
  lane :release do
    match(type: "appstore", readonly: true)
    build_app(workspace: "MyApp.xcworkspace",
              scheme: "MyApp",
              export_method: "app-store")
    upload_to_app_store(skip_screenshots: true,
                       skip_metadata: true,
                       force: true)
  end
end

Troubleshooting

“Signing for requires a development team”

Open the project in Xcode → select target → Signing & Capabilities → choose your team from the dropdown.

“Provisioning profile doesn’t include the current device”

For development builds, register your device UDID in the Developer Portal and regenerate the profile. For App Store builds, device registration is not needed.

“No signing certificate found”

Your distribution certificate’s private key is missing from Keychain. Import the .p12 backup or re-generate the certificate.

“iTunes Connect operation failed”

This usually means a metadata conflict or duplicate build number. Increment the build number and re-upload.

Xcode stuck on “Processing”

App Store Connect processing can take up to several hours. Check status at App Store Connect under Activity.


Checklist