
How to Publish Your First iOS App to the App Store using Expo EAS
🍏 First-Time iOS App Publishing with Expo EAS (No Mac Required!)
So, you've built a React Native app with Expo and want to publish it to the iOS App Store? Congratulations!
But now you're here, thinking:
“Do I need a Mac? Xcode? What the heck is a provisioning profile?”
Fear not! With Expo's EAS Build + Submit, publishing your iOS app is totally doable—even from a Windows or Linux machine. This guide walks you through EVERY step with edge cases, screenshots, and gotchas.
🛠️ What You’ll Need
✅ An Apple Developer Account
✅ Your Expo project ready (eas build
tested on Android/local)
✅ A paid Apple Developer Program (₹8,900/year or $99/year)
✅ An app icon & splash screen
✅ Expo CLI installed (npm install -g expo-cli eas-cli
)
✅ Login to Expo: npx expo login
🔧 Step 1: Configure Your App for EAS
In your project root, run:
npx expo install eas-cli
npx eas build\:configure
Choose:
- iOS ✅
- Managed Workflow ✅ (Assuming you're using pure Expo)
This creates an eas.json
file with build profiles like development
, preview
, and production
.
Example:
{
"build": {
"production": {
"ios": {
"buildType": "release"
}
}
}
}
🧾 Step 2: Set Your App Details in app.json
or app.config.js
Update your app.json
:
{
"expo": {
"name": "My First iOS App",
"slug": "my-first-ios-app",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "cover",
"backgroundColor": "#ffffff"
},
"ios": {
"bundleIdentifier": "com.yourname.myfirstapp",
"buildNumber": "1.0.0",
"supportsTablet": true
}
}
}
🧠 Edge Case: bundleIdentifier
Must Be Unique
You cannot reuse the same bundle ID for different apps. Once used, it’s locked forever in Apple land.
🔐 Step 3: Login to EAS and Apple Developer
Login to Expo:
npx expo login
Login to Apple using EAS:
npx eas whoami
npx eas account:login
Then:
npx eas credentials
You’ll be prompted:
- To let Expo handle credentials (YES, let them do the magic)
- To login to Apple Developer (via browser or Apple app password)
🔐 Edge Case: Apple 2FA
Apple might ask for a two-factor code or app-specific password.
- Go to appleid.apple.com
- Generate App-Specific Password if 2FA fails
🏗️ Step 4: Build the iOS .ipa File (Cloud Build)
Let’s build the app for iOS:
npx eas build --platform ios --profile production
This will:
- Upload your code to Expo servers
- Start a cloud build on macOS
- Automatically manage provisioning profile, certificates, and signing
🧠 Edge Case: Bundle Identifier Already Used
If your bundle ID is already taken or previously used:
- Change it in
app.json
- Make sure it’s not tied to another app in App Store Connect
Once build finishes, you’ll get a downloadable .ipa
file and a link to open the build page.
📦 Step 5: Create App in App Store Connect
-
Go to App Store Connect
-
Click "My Apps" > "+" > New App
-
Fill in:
- Platform: iOS
- Name: App name (must be unique)
- Bundle ID: Select the same one used in
app.json
- SKU: Internal code, like
myfirstapp001
- User Access: Full access
-
Click Create
🚀 Step 6: Submit to App Store
You can now submit the app either via CLI or manually.
Option 1: The Expo Way
npx eas submit --platform ios
You’ll be prompted:
- Use the recent build? ✅
- Login to Apple (again, if not saved)
This uses Apple Transporter under the hood.
Option 2: Manual Upload via Transporter (macOS only)
- Download the
.ipa
file - Open Apple Transporter (from Mac App Store)
- Drag-and-drop
.ipa
and click “Deliver”
🧪 Step 7: Fill Metadata in App Store Connect
- Screenshots for iPhone & iPad (required!)
- Short description, long description
- Keywords
- Support & marketing URL (use dummy if not ready)
- Pricing (free or paid)
- Version details + "What’s New?"
✅ Step 8: Submit for Review
-
Click “Submit for Review”
-
Apple might ask you:
- “Do you use third-party logins?” → Yes/No
- “Do you collect user data?” → Select appropriately
- “Does your app need location, camera, etc.?” → Explain each permission
🕵️♂️ Step 9: Review & Approval
-
Review usually takes 24–48 hours
-
If rejected:
- Check the email
- Fix issues (UI bugs, metadata, missing screenshots)
- Resubmit from App Store Connect
🥳 Step 10: Your App is Live!
Once approved, your app will be live globally (or in the countries you chose)!
- Share your link:
https://apps.apple.com/app/idYOUR_APP_ID
🔍 Bonus Tips for First-Time Founders
💡 1. Don’t skip screenshots
Use services like:
💡 2. Add privacy policy
Use Termly or FreePrivacyPolicy
💡 3. Use app.config.js
for dynamic builds
Great for white-labeled apps with multiple bundle IDs.
🙌 Final Thoughts
Publishing to the iOS App Store used to require a Mac, Xcode, and some black magic. Now, with Expo EAS, it’s much easier—even for non-Mac users!
So go ahead, ship your dream, impress your friends, and drop that App Store link in your bio! 💪📱