Deploying to App Stores
Once you’ve built your production app, the final step is submitting it to the Apple App Store and Google Play Store. This guide walks through the entire submission process.Prerequisites
Before submitting to app stores:Apple App Store
- Apple Developer Program membership ($99/year)
- Production iOS build (.ipa file)
- App Store Connect account
- App screenshots and metadata
- Privacy policy URL (required)
Google Play Store
- Google Play Developer account ($25 one-time fee)
- Production Android build (.aab file)
- Google Play Console access
- App screenshots and metadata
- App manually uploaded at least once (API limitation)
Submitting to Apple App Store
Create App in App Store Connect
- Go to App Store Connect
- Click My Apps > + > New App
- Fill in app information:
- Platform: iOS
- Name: Your app name (max 30 characters)
- Primary Language: Main language
- Bundle ID: Select your bundle identifier
- SKU: Unique identifier (e.g.,
com-company-app-001) - User Access: Full access or Limited access
Configure App Information
Required Information:General > App Information- Privacy Policy URL (required)
- Category (Primary and Secondary)
- Content Rights (whether it contains third-party content)
- What data does your app collect?
- Is data linked to user identity?
- Is data used for tracking?
- If using
expo-updates: Select Crash Data collection - If using analytics: Declare analytics data collection
- If using authentication: Declare user identity data
Prepare App Metadata
Version Information > App StoreRequired assets:-
Screenshots (iPhone and iPad)
- iPhone 6.7”: 1290 x 2796 pixels (at least 3)
- iPhone 6.5”: 1284 x 2778 pixels (at least 3)
- iPad Pro 12.9”: 2048 x 2732 pixels (optional)
-
App Preview Videos (optional but recommended)
- 15-30 seconds showcasing your app
- Portrait or landscape orientation
- Description: Full description (max 4000 characters)
- Keywords: Comma-separated (max 100 characters)
- Support URL: Customer support website
- Marketing URL: App marketing page (optional)
- Promotional Text: Featured text (max 170 characters, can be updated without new version)
Build and Submit with EAS
Build and submit in one command:eas.json
- Go to App Store Connect > Apps
- Click your app
- Go to App Information
- Find Apple ID under General Information
Submit for Review
After upload completes:- Go to App Store Connect
- Navigate to your app version
- Complete any missing metadata
- Add build:
- Click + next to Build
- Select your uploaded build
- Wait for processing (10-15 minutes)
- Complete App Review Information:
- Contact information
- Demo account (if login required)
- Notes for reviewer
- Complete Version Release settings:
- Manual release or Automatic release
- Click Submit for Review
App Review Process
Timeline:- Initial review: 24-48 hours typically
- Rejections can be appealed
- Emergency reviews available (with justification)
- Missing privacy policy
- Crashes on launch
- Incomplete functionality
- Misleading metadata
- Requires demo account but none provided
- Uses private APIs
- Minimal functionality
- Auto-release or manual release
- Available on App Store within hours
- Can be removed or updated anytime
Submitting to Google Play Store
Create App in Google Play Console
- Go to Google Play Console
- Click Create app
- Fill in details:
- App name: Your app name
- Default language: Primary language
- App or game: Select appropriate type
- Free or paid: Select pricing
- Accept declarations
- Click Create app
Complete Store Listing
Store listing > Main store listingRequired information:App details:- Short description (max 80 characters)
- Full description (max 4000 characters)
- App icon: 512 x 512 px PNG (32-bit with alpha)
- Feature graphic: 1024 x 500 px JPG or PNG
- Phone screenshots: At least 2 (16:9 or 9:16 aspect ratio)
- Min 320px, max 3840px
- Tablet screenshots: At least 2 (recommended)
- Promo video: YouTube URL (optional)
- App category
- Tags (optional)
- Content rating (complete questionnaire)
- Email address
- Phone number (optional)
- Website (optional)
Set Up Google Service Account
For EAS Submit API access:- Go to Google Cloud Console
- Create or select project
- Enable Google Play Android Developer API
- Create service account:
- IAM & Admin > Service Accounts > Create
- Name: “EAS Submit”
- Click Create and Continue
- Skip optional steps
- Create key:
- Click on service account
- Keys > Add Key > Create new key
- Select JSON
- Download and save securely
- Grant access in Play Console:
- Users and permissions > Invite new users
- Add service account email
- Set permissions: Release to production tracks
Upload First Build Manually
- Go to Play Console > Your app
- Navigate to Production > Create new release
- Upload your .aab file
- Add release notes
- Save (don’t publish yet)
Submit with EAS
Configure eas.json:eas.json
"production": Public release"beta": Beta testing"alpha": Alpha testing"internal": Internal testing (up to 100 testers)
"completed": Immediately publish"draft": Save as draft (review in console before publishing)"inProgress": Start rollout"halted": Paused rollout
Complete Remaining Requirements
Content rating:- Go to Policy > App content
- Complete content rating questionnaire
- Submit for rating
- Select target age groups
- Complete required declarations
- Go to Policy > Data safety
- Answer questions about data collection:
- Location data
- Personal info
- Photos/videos
- Audio files
- Financial info
- And more…
- Explain data usage and sharing
Publish Release
- Go to Production track
- Review your release
- Click Review release
- Verify all information
- Click Start rollout to Production
- Staged rollout: 1%, 5%, 10%, 20%, 50%, 100%
- Full rollout: 100% immediately
- Usually 1-3 days
- Can take up to 7 days
- Check status in Play Console
Automated Submissions
Using EAS Workflows
Automate builds and submissions:.eas/workflows/release.yml
Using CI/CD
Example GitHub Actions:.github/workflows/submit.yml
Version Management
iOS Version Numbers
CFBundleShortVersionString (Version):- User-facing version:
1.0.0 - Must increment for each App Store release
- Semantic versioning recommended:
MAJOR.MINOR.PATCH
- Internal build number:
1,2,3… - Must increment for each build
- Can auto-increment with EAS:
eas.json
Android Version Numbers
versionName (Version):- User-facing version:
"1.0.0" - Displayed in Play Store
- String value in app.json
- Internal integer:
1,2,3… - Must increment for each release
- Can auto-increment with EAS:
eas.json
app.json
Store Requirements Checklist
iOS App Store
- App Store Connect account created
- App created in App Store Connect
- Bundle identifier matches build
- Privacy policy URL provided
- App privacy questions answered
- Screenshots (at least 3 for iPhone)
- App icon (1024x1024px)
- Description and keywords
- Support and marketing URLs
- Content rights information
- Export compliance answered
- Demo account (if app requires login)
- Build uploaded and processed
- Build selected for version
- Version submitted for review
Google Play Store
- Google Play Developer account created
- App created in Play Console
- Package name matches build
- Store listing completed
- Graphics uploaded (icon, feature graphic, screenshots)
- Content rating completed
- Target audience selected
- Data safety form completed
- App categories selected
- Pricing and distribution set
- Google Service Account created
- First build uploaded manually
- Production release created
- Release reviewed and rolled out
Troubleshooting
iOS: “This bundle is invalid”
Issue: Build rejected during upload Solutions:- Ensure bundle identifier matches App Store Connect
- Verify build is signed with distribution certificate
- Check for missing required device capabilities
- Rebuild with latest EAS CLI
iOS: “Missing compliance”
Issue: Export compliance warning Solution: Add to app.json:app.json
Android: “Version code has already been used”
Issue: Duplicate version code Solution: Increment versionCode in app.json or use auto-increment:eas.json
Android: “Upload failed: Forbidden”
Issue: Service account lacks permissions Solution:- Go to Play Console > Users and permissions
- Find your service account
- Grant “Release to production tracks” permission
- Wait 24 hours for permissions to propagate
Submission stuck in processing
iOS:- Processing usually takes 10-15 minutes
- If stuck > 1 hour, contact Apple Developer Support
- Check Play Console for error messages
- Verify build uploaded successfully
- Review release status in console
Next Steps
- Over-the-Air Updates - Deploy updates without store review
- Internal Distribution - Beta testing before store release
- Versioning Best Practices - Manage app versions effectively