Deploy an Ionic App to Apple App Store — Complete Step by Step Guide

In this article we going to learn the complete process of deploying an Ionic app to the Apple App Store — from setting up an Apple Developer account to submitting the app for review.

Deploying to the App Store is more involved than the Play Store. Apple has stricter requirements, more setup steps, and the review process is thorough. But once we understand the flow, it becomes manageable. The most confusing parts are certificates, provisioning profiles, and App Store Connect — and we'll cover all of those clearly.

One important thing to know before starting — we need a Mac to build and deploy an iOS app. Xcode only runs on macOS. There's no way around this for iOS development. If we're on Windows, we need either a Mac machine, a Mac Mini in the cloud (services like MacStadium or Codemagic), or a CI/CD service that builds on Mac.

This tutorial shows how to:

  • Set up an Apple Developer account and enroll in the Developer Program
  • Configure our Ionic app for iOS with Capacitor
  • Set up App ID, Bundle ID, and certificates in Apple Developer Portal
  • Create a provisioning profile for App Store distribution
  • Build and archive the app in Xcode
  • Set up the app listing in App Store Connect
  • Upload the build using Xcode Organizer
  • Submit the app for Apple's review process

What We Need Before Starting

Make sure these are ready before we begin :

  • A Mac computer with macOS Ventura or later
  • Xcode 15 or later installed from the Mac App Store (it's free)
  • An Apple Developer account enrolled in the Apple Developer Program — $99/year
  • Ionic app with Capacitor set up for iOS
  • App icons in required sizes (we'll cover this)
  • At least one screenshot of the app

If we haven't added iOS to our Ionic Capacitor project yet :

ionic build
npx cap add ios
npx cap sync ios

Step 1 : Enroll in Apple Developer Program

Go to developer.apple.com and sign in with our Apple ID. Click Account.

Click Join the Apple Developer Program. Select Enroll. Choose whether we're enrolling as an Individual or an Organization. For solo developers, Individual is fine. For a company, choose Organization — this requires a D-U-N-S number which can take a few days to process.

Pay the $99/year fee. Once payment is processed, enrollment is usually active within 24 hours.

With the Developer Program we get access to :

  • App Store Connect — where we manage app listings and builds
  • Apple Developer Portal — where we manage certificates and provisioning profiles
  • TestFlight — for beta testing before App Store release

Step 2 : Build the Ionic App for Production

Run a production build of our Ionic app and sync to iOS :

ionic build --configuration production
npx cap sync ios

Open the iOS project in Xcode :

npx cap open ios

Xcode opens our project. The first time takes a while to index. Wait for it to finish before doing anything else.


Step 3 : Configure Bundle ID and Version in Xcode

In Xcode, click on the project name in the left sidebar (the top-most item). Select the App target.

Under the General tab :

Bundle Identifier — this is our app's unique ID on the App Store. Format is reverse domain — com.yourcompany.appname. This must match the App ID we create in the Developer Portal. Can't be changed after publishing.

Version — the version string shown to users. Like "1.0.0".

Build — an incrementing number. Every upload to App Store Connect must have a higher Build number than previous uploads. Start at 1.

Also check the Deployment Info section — set the minimum iOS version. iOS 14 or 15 is a safe minimum for most apps. Setting too high a minimum reduces the number of devices that can install our app.


Step 4 : Create App ID and Certificates in Developer Portal

Go to developer.apple.com/account and sign in.

Create an App ID :

Click Certificates, Identifiers & Profiles → Identifiers → +

Select App IDsApp → Continue.

Fill in :

  • Description — name for this App ID
  • Bundle ID — select Explicit and enter the same Bundle ID as in Xcode — com.yourcompany.appname
  • Capabilities — check any capabilities our app uses. Push notifications, Sign in with Apple, etc.

Click ContinueRegister.

Create a Distribution Certificate :

Click Certificates → +

Select Apple Distribution (for App Store submissions). Click Continue.

Xcode can manage this automatically for us. In Xcode, under Signing & Capabilities tab, check Automatically manage signing. Enter our Apple ID when prompted. Xcode downloads or creates the needed certificates automatically.

This is the easiest approach and works for most cases. If we need manual control — for CI/CD pipelines or team setups — we create certificates manually in the portal and download them.


Step 5 : Create a Provisioning Profile

A provisioning profile links our App ID, certificate, and registered devices together. For App Store distribution we need a App Store Distribution provisioning profile.

If we have Automatically manage signing enabled in Xcode, Xcode creates and manages provisioning profiles automatically. We don't need to do this manually.

For manual creation — go to Certificates, Identifiers & Profiles → Profiles → +

Select App Store Connect under Distribution. Click Continue.

Select the App ID we created. Click Continue.

Select our distribution certificate. Click Continue.

Give the profile a name like YourApp AppStore Distribution. Click Generate.

Download the .mobileprovision file and double click it to install. It appears in Xcode automatically after installation.


Step 6 : Configure App Icons

The App Store requires a 1024 x 1024 px app icon with no transparency (no alpha channel). JPEG or PNG both work.

In our Ionic project, we can generate all required icon sizes using the @capacitor/assets tool :

npm install @capacitor/assets --save-dev

Place a 1024 x 1024 PNG icon at resources/icon.png. Then run :

npx capacitor-assets generate --ios

This generates all the required iOS icon sizes and places them in the correct Xcode asset catalog. After running this, sync again :

npx cap sync ios
npx cap open ios

Verify the icons are there in Xcode under App → Assets.xcassets → AppIcon.


Step 7 : Archive the App in Xcode

Archiving creates a production build of our app packaged for App Store submission.

In Xcode, make sure the scheme is set to App (not a simulator). In the top menu bar where we select the target device, select Any iOS Device (arm64) — not a simulator. We must build for a real device target to archive.

Go to Product → Archive.

Xcode builds and archives the app. This takes a few minutes. When done, the Organizer window opens automatically showing our archive.

If the archive option is greyed out, it usually means we still have a simulator selected as the target. Switch to Any iOS Device and try again.


Step 8 : Set Up App in App Store Connect

While Xcode is archiving, we can set up the App Store listing.

Go to appstoreconnect.apple.com and sign in.

Click My Apps → + → New App.

Fill in :

  • Platforms — iOS
  • Name — the app name as shown on the App Store. Max 30 characters.
  • Primary language — our default language
  • Bundle ID — select the App ID we registered in the Developer Portal
  • SKU — a unique identifier for our app for internal tracking. Can be anything — like MYAPP001
  • User access — Full Access for now

Click Create.

We land on the app's App Store Connect page. Fill in the store listing details :

App Information :

  • Subtitle — max 30 characters. Appears below the app name in search. Optional but recommended.
  • Category — choose the most relevant primary category
  • Content rights — does the app contain third-party content?

App Store page for this version :

  • Description — max 4000 characters. Describe the app features clearly.
  • Keywords — max 100 characters total. Comma-separated. These affect search rankings.
  • Support URL — URL to a support page or our website
  • Marketing URL — optional website URL

App Previews and Screenshots :

Apple requires screenshots for specific device sizes. At minimum we need screenshots for :

  • 6.9 inch display (iPhone 16 Pro Max size)
  • 6.5 inch display (iPhone 11 Pro Max size)

Screenshots must be captured at the correct dimensions. Take them on a simulator or physical device of that size, or design them at exact pixel dimensions :

  • 6.9 inch : 1320 x 2868 px
  • 6.5 inch : 1242 x 2688 px

Step 9 : Complete the App Review Information

Click App Review Information in the left panel.

Contact Information — our name, phone, email. Apple contacts us here if there are review questions.

Demo Account — if our app requires login, provide test credentials. Apple reviewers need to access the app's features. If we don't provide working credentials, the app gets rejected. Use a dedicated test account — don't give real user credentials.

Notes — optional but useful. Explain anything that might confuse reviewers — special gestures, features that require specific setup, etc.

App Availability :

Click Pricing and Availability. Set the price — Free or select a price tier. Choose which countries to distribute in. For worldwide distribution, select all territories.

Age Rating :

Click Age Rating. Answer questions about the app's content. Apple generates the rating. For most business apps it comes back as 4+.

App Privacy :

Click App Privacy → Get Started. Declare all data our app collects — email addresses, user IDs, device info, location data, etc. If we use Firebase Auth, we collect email and user ID — declare those. This section has become more important since Apple added the Privacy Nutrition Label to the App Store.


Step 10 : Upload Build and Submit for Review

Go back to Xcode Organizer (Window → Organizer). Select our archive.

Click Distribute App.

Select App Store Connect → Next.

Select Upload → Next.

Leave the default options checked :

  • Include bitcode for iOS content — Yes (or No for newer Xcode versions where bitcode is deprecated)
  • Strip Swift symbols — Yes
  • Upload app symbols — Yes

Click Next. Xcode validates and uploads the build to App Store Connect. This takes a few minutes.

Once uploaded, go to App Store Connect → our app → the version we created. Scroll down to Build. Click Select a build and choose the build we just uploaded. It may take a few minutes to process after upload before it appears.

Now go back to the top and click Add for Review (or Submit for Review depending on the App Store Connect version).

Apple asks a few final questions :

  • Does the app use advertising identifier (IDFA)? — Usually No for most apps
  • Export compliance — does the app use encryption? Standard HTTPS is exempt. Click Yes for standard encryption exemption.

Click Submit.


What Happens After Submission

Apple reviews every app before it goes live. For new apps the review typically takes 24-48 hours. Sometimes faster, sometimes longer.

We'll receive an email when the review is complete. If approved, the app status changes to Ready for Sale and it appears on the App Store within a few hours.

If rejected, Apple sends a message explaining exactly why. Common rejection reasons :

Guideline 2.1 — App Completeness The app crashes during review or has broken features. Test thoroughly on a real device before submitting.

Guideline 4.0 — Design The app looks like a web wrapper without enough native functionality. Make sure our Ionic app has proper native feel — avoid showing browser scroll bars, make sure all navigation works correctly.

Guideline 5.1.1 — Privacy — Data Collection Privacy policy missing, App Privacy section incomplete, or app requests permissions it doesn't use. Audit all permission requests in Info.plist.

Metadata rejection Screenshots don't show the actual app, description is misleading, or app name contains keywords inappropriately.


Common Issues

"No accounts with iTunes Connect access" in Xcode

Sign out of Xcode and sign back in. Go to Xcode → Settings → Accounts. Remove and re-add our Apple ID. Make sure the Apple ID is added to the App Store Connect team as Admin or App Manager.

Archive option is greyed out

We have a simulator selected as the target. Change to Any iOS Device (arm64) in the top device selector.

"Missing compliance" warning during upload

Xcode is asking about export compliance. For apps using standard HTTPS, select "No" to proprietary encryption and answer that our app uses only standard encryption.

Provisioning profile errors

Make sure the Bundle ID in Xcode exactly matches the App ID registered in the Developer Portal. A single character difference causes the profile to not match.

Build not appearing in App Store Connect after upload

Wait 10-15 minutes. Apple processes uploaded builds before they appear. Also check our email — Apple sometimes sends a message about missing export compliance that needs to be answered before the build is processed.


Summary

We learned the complete process of deploying an Ionic app to the Apple App Store. We covered :

  • Enrolling in the Apple Developer Program at $99/year
  • Building the Ionic app in production mode and syncing to iOS
  • Setting Bundle ID and Build number in Xcode
  • Creating App ID and distribution certificate in the Apple Developer Portal
  • Using Xcode's Automatic Signing to manage provisioning profiles
  • Generating app icons using @capacitor/assets
  • Archiving the app using Product → Archive in Xcode
  • Creating the app listing in App Store Connect with descriptions, screenshots, and privacy details
  • Uploading the build via Xcode Organizer and submitting for review
  • Common rejection reasons and how to avoid them

The Apple deployment process has more steps than Android but once we've done it once, the second release is much faster. The main things to get right the first time — Bundle ID matches everywhere, screenshots match the actual app, and the App Privacy section is honest and complete.

I hope you like this article...

Happy coding! 🚀

Post a Comment

0 Comments