Topic 15: Uploading App to App Store for iOS
📖 5 min read · 🎯 advanced · 🧭 Prerequisites: generating-signed-apk, uploading-app-to-playstore-for-android
Why this matters
You've built your React Native app, tested it, and it runs beautifully on your device. But right now, only you can see it. Getting it onto the App Store is a whole different challenge — Apple has a strict review process, certificates, provisioning profiles, Xcode archives, and App Store Connect to navigate before your app reaches real users. It feels like a lot of gates to pass through, but once you know the steps, it's a repeatable process. Let's walk through exactly how to take your React Native app from your machine to the iOS App Store.
What You'll Learn
- Set up your React Native project in Xcode for App Store distribution
- Create and configure an App Store Connect listing with all required metadata
- Archive your app in Xcode and upload the build to App Store Connect
- Submit your app for Apple's review and understand the approval workflow
The Analogy
Think of submitting to the App Store like shipping cargo through a heavily regulated international port. Your app is the cargo, Xcode is the freight company that packages and seals the container, and App Store Connect is the customs office where you file all the paperwork — name, contents, compliance declarations, screenshots of the goods. Apple's review team is the customs inspector who opens the container, checks everything against your manifest, and only waves it through when every field matches. Skip one form or mislabel a field and the shipment bounces back. Get it right and your cargo reaches every iOS dock on the planet.
Chapter 1: Prerequisites
Before a single archive is created, three accounts and one tool must be in place.
- Apple Developer Account — Register at https://developer.apple.com/. The annual fee is $99 USD. Without this, you cannot sign builds or submit to the App Store.
- Xcode — Download and install Xcode from the Mac App Store. Xcode is the only tool Apple supports for archiving and uploading iOS builds; it is macOS-only.
- App Store Connect Account — Access https://appstoreconnect.apple.com/ to manage your app listing, metadata, screenshots, and submissions. Your Apple Developer account grants access to App Store Connect automatically.
All three must be active before you proceed to any later chapter.
Chapter 2: Setting Up the Project for Distribution
With accounts in hand, alex walked the class through configuring the React Native project inside Xcode so it would pass Apple's packaging requirements.
Step 1: Update the App Display Name and Bundle Identifier
- Navigate to the
ios/directory of your React Native project and open the.xcworkspacefile in Xcode (not.xcodeproj). - Select your project in the Project Navigator (the leftmost panel).
- Under the General tab, update the Display Name — what users see under the app icon — and the Bundle Identifier, which must match exactly what you registered in App Store Connect (e.g.,
com.yourcompany.yourapp).
Step 2: Set the Deployment Target
The deployment target defines the oldest iOS version your app will run on.
- Select your project in the Project Navigator.
- Under the General tab, find Deployment Info and set it to the minimum iOS version you intend to support (e.g., iOS 12.0).
Step 3: Create an App Icon
Apple requires icons in many specific sizes. Missing any size will cause the archive to fail validation.
- Open
Images.xcassetsin Xcode. - Right-click and choose App Icons & Launch Images → New iOS App Icon.
- Add your app icon artwork in each required size slot (20 pt, 29 pt, 40 pt, 60 pt, 76 pt, 83.5 pt, 1024 pt for the App Store).
Tools like AppIcon.co or MakeAppIcon can generate the full set from a single 1024×1024 PNG.
Chapter 3: Creating an App Store Connect Listing
Before Xcode can deliver a build anywhere, there must be a destination — an app record in App Store Connect.
Step 1: Create a New App in App Store Connect
- Go to https://appstoreconnect.apple.com/ and click My Apps.
- Click the + button and select New App.
- Fill in the required fields:
- Platforms — iOS
- App Name — the public name on the store
- Primary Language — the default language for your listing
- Bundle ID — must match the Bundle Identifier set in Xcode
- SKU — an internal identifier unique to your account (not visible to users)
- User Access — Full Access or Limited
- Click Create.
Step 2: Fill in the App Information
Once the app record exists, populate every required section:
- App Information — Name, Subtitle (optional, 30-char limit), Privacy Policy URL (mandatory for apps that collect any data), category.
- Pricing and Availability — Set a price tier (Free or paid) and which countries/regions can access the app.
- App Privacy — Declare what data your app collects and how it is used. Apple displays this as the "Nutrition Label" on your store page.
- App Previews and Screenshots — Upload screenshots for each required device size (6.7-inch, 6.5-inch, 5.5-inch iPhones, and iPad sizes if you support iPad). Minimum one screenshot per device family you list.
- Version Information — Provide the version number (e.g.,
1.0.0), build number, and app description (up to 4,000 characters).
Chapter 4: Archiving and Uploading the App
With the listing ready, alex demonstrated the archive-and-upload sequence entirely inside Xcode.
Step 1: Configure the Build Settings
- Open your project in Xcode.
- Select your project in the Project Navigator.
- Under the Build Settings tab, confirm that Build Configuration is set to Release (not Debug). Release builds apply compiler optimizations and strip debug symbols.
Step 2: Create an Archive
# Ensure no simulator is selected — choose "Any iOS Device (arm64)" in the scheme toolbar
- In Xcode, select your project scheme from the scheme selector in the toolbar.
- Make sure the destination is set to Any iOS Device (arm64) — archiving fails if a simulator is selected.
- Go to Product → Archive.
- Xcode compiles a Release build and packages it. When complete, the Organizer window opens automatically, listing your new archive.
Step 3: Upload the Archive to App Store Connect
- In the Organizer window, select the freshly created archive and click Distribute App.
- Select App Store Connect and click Next.
- Select Upload and click Next.
- Follow the prompts:
- Select your Distribution Certificate.
- Select your app's Provisioning Profile (must be an App Store distribution profile, not an Ad Hoc or Development profile).
- Click Upload. Xcode transmits the binary to Apple's servers.
- Once the upload finishes, navigate to App Store Connect → My Apps → [Your App] → TestFlight (or the version page under the App Store tab) to confirm the build appears. Processing typically takes 5–30 minutes.
sequenceDiagram
participant Dev as Developer (Xcode)
participant ASC as App Store Connect
participant Apple as Apple Review
Dev->>Dev: Product → Archive (Release build)
Dev->>ASC: Distribute App → Upload
ASC-->>Dev: Build processing (5–30 min)
Dev->>ASC: Attach build to version, Submit for Review
ASC->>Apple: Review queue
Apple-->>ASC: Approved / Rejected
ASC-->>Dev: Email notification
Chapter 5: Submitting the App for Review
Uploading a build and submitting for review are two separate actions. the trainer emphasized this distinction — many developers upload successfully but forget to hit Submit.
Step 1: Submit the Build for Review
- In App Store Connect, go to My Apps and select your app.
- Under the App Store tab, select the version you are preparing for release.
- Under Build, click the + icon and attach the uploaded build (it must have finished processing).
- Click Submit for Review.
- Answer Apple's required questions:
- Does the app use the Advertising Identifier (IDFA)?
- Does the app use encryption?
- Is the app designed for children?
- Provide any additional notes for the reviewer (login credentials for demo accounts, special instructions, etc.).
- Click Submit.
Step 2: Wait for Approval
Apple's review team will evaluate your app against the App Store Review Guidelines. You will receive email notifications at each status change:
- Waiting for Review — queued
- In Review — an Apple reviewer is actively evaluating the app
- Approved — your app is ready to release
- Rejected — Apple will provide a reason; address the issue and resubmit
Review times typically range from 24 hours to a few days. Once approved, you can release immediately or schedule a future release date in App Store Connect.
🧪 Try It Yourself
Task: Archive your React Native app and confirm it reaches App Store Connect's processing queue.
- Open your React Native iOS project in Xcode (
ios/*.xcworkspace). - Set the scheme destination to Any iOS Device (arm64).
- Go to Product → Archive and wait for the Organizer to open.
- Click Distribute App → App Store Connect → Upload and complete the wizard.
Success criterion: Log into App Store Connect, navigate to your app's TestFlight tab or version page, and see the build listed with status "Processing" or "Ready to Submit" within 30 minutes of upload.
Starter checklist before archiving:
checklist:
- bundle_id_matches_app_store_connect: true
- build_configuration: Release
- deployment_target_set: true
- app_icon_all_sizes_filled: true
- provisioning_profile_type: App Store Distribution
- app_store_connect_listing_created: true
🔍 Checkpoint Quiz
Q1. Why must you open the .xcworkspace file rather than the .xcodeproj file when working with a React Native iOS project?
A) .xcworkspace compiles faster
B) .xcworkspace includes CocoaPods dependencies; .xcodeproj alone will be missing linked libraries
C) Apple's upload tool only accepts workspaces
D) .xcodeproj files are deprecated in Xcode 14+
Q2. A developer archives their app and attempts to upload, but Xcode rejects the archive with "No applicable devices found." What is the most likely cause?
A) The Bundle Identifier is missing
B) The scheme destination was set to a Simulator instead of "Any iOS Device (arm64)"
C) The Deployment Target is too low
D) The app icon is missing the 1024 pt size
Q3. Given this scenario: you uploaded a build to App Store Connect two hours ago, but the + button to attach a build to your version is greyed out. What should you check first?
A) Whether the Privacy Policy URL is filled in
B) Whether the build has finished processing in App Store Connect (processing can take up to 30 minutes and occasionally longer)
C) Whether your Apple Developer account is renewed
D) Whether the Bundle Identifier matches
Q4. After clicking "Submit for Review," Apple sends a rejection citing "Missing privacy policy URL." Where in App Store Connect do you add this URL to resolve the rejection?
A) Under TestFlight → External Groups
B) Under App Information → Privacy Policy URL
C) Under Pricing and Availability
D) Under Build Settings in Xcode
A1. B — React Native projects use CocoaPods for dependency management, and CocoaPods generates the .xcworkspace that links all pods. Opening only .xcodeproj skips those linked libraries and will produce build errors.
A2. B — Archiving requires a real device target. When a Simulator is selected in the scheme destination, Xcode cannot produce an App Store-valid archive because Simulator builds use a different CPU architecture (x86_64/arm64-simulator vs. arm64 for physical devices).
A3. B — App Store Connect must finish processing the uploaded binary (validating entitlements, running Apple's automated checks) before it appears as attachable to a version. The greyed-out button is normal while processing is in progress; wait and refresh.
A4. B — The Privacy Policy URL lives under App Information in the App Store Connect version editor. It is a required field for any app that collects user data, and Apple will reject submissions where it is absent or contains an unreachable URL.
🪞 Recap
- An Apple Developer account, Xcode, and an App Store Connect listing are all required before you can submit an iOS app.
- The Bundle Identifier in Xcode and App Store Connect must match exactly, or the upload will fail.
- Archiving must target Any iOS Device (arm64) — never a Simulator — and must use a Release build configuration.
- Uploading a build via Xcode's Distribute App wizard and submitting for review in App Store Connect are two separate steps; both are required.
- Apple reviews your app against its published guidelines and notifies you by email at every status change.
📚 Further Reading
- Apple App Store Review Guidelines — the official rulebook every submission is measured against
- App Store Connect Help — Apple's own documentation for managing listings, builds, and releases
- React Native iOS Publishing Docs — PLACEHOLDER — React Native's official walkthrough for the App Store submission process
- ⬅️ Previous: Uploading App to Play Store for Android
- ➡️ Next: None