Store Submission Guide
Complete guide for submitting your app to the App Store and Google Play Store.
Table of Contents
- Pre-Submission Checklist
- App Store (iOS)
- Google Play Store (Android)
- Common Rejection Reasons
- Post-Submission
Pre-Submission Checklist
Technical Requirements
- App runs without crashes on all target devices
- All features work correctly offline (if applicable)
- Deep links are configured and tested
- Push notifications work correctly
- Analytics tracking is properly implemented
- Error tracking is configured
- All API keys are production keys (not test/sandbox)
- Remove all console.log statements or use production logger
Content Requirements
- App icon meets platform guidelines
- Screenshots for all required device sizes
- App description (short and long)
- Privacy policy URL
- Terms of service URL (if applicable)
- Support email/URL
- Marketing URL (optional)
Legal Requirements
- Privacy policy is up to date
- GDPR compliance (if serving EU users)
- CCPA compliance (if serving California users)
- Age rating content is accurate
- All third-party licenses are included
App Store (iOS)
1. Apple Developer Account Setup
1. Go to https://developer.apple.com
2. Enroll in Apple Developer Program ($99/year)
3. Complete enrollment verification
4. Set up App Store Connect access
2. App Store Connect Configuration
Create App Record
- Go to App Store Connect
- Click "My Apps" β "+" β "New App"
- Fill in:
- Platform: iOS
- Name: Your app name (max 30 characters)
- Primary Language
- Bundle ID: Must match
app.jsonβexpo.ios.bundleIdentifier - SKU: Unique identifier (e.g.,
com.yourcompany.appname.v1)
App Information
Category: Select primary and secondary category
Content Rights: Declare if using third-party content
Age Rating: Complete questionnaire honestly
Privacy Policy URL: https://yoursite.com/privacy
Support URL: https://yoursite.com/support
Marketing URL: https://yoursite.com (optional)
Pricing and Availability
- Select price tier (or Free)
- Choose countries/regions
- Set pre-order options (optional)
3. Required Screenshots
| Device | Size | Required |
|---|---|---|
| iPhone 6.7" | 1290 x 2796 px | Yes |
| iPhone 6.5" | 1284 x 2778 px | Yes |
| iPhone 5.5" | 1242 x 2208 px | Optional |
| iPad Pro 12.9" | 2048 x 2732 px | If iPad supported |
Screenshot Tips:
- Show real app functionality
- Use device frames (optional)
- Add marketing text overlay
- Maintain consistent style across all screenshots
- Maximum 10 screenshots per device size
4. App Review Information
Contact Information:
First Name: [Your name]
Last Name: [Your last name]
Phone: [Your phone]
Email: [Your email]
Demo Account (if login required):
Username: demo@example.com
Password: demopassword123
Notes for Reviewer:
- Explain any non-obvious features
- Provide test credentials
- Explain in-app purchases if applicable
5. In-App Purchases (if applicable)
- Go to "Features" β "In-App Purchases"
- Add each product:
- Reference Name
- Product ID (must match RevenueCat)
- Pricing
- Localized Display Name and Description
- Review Screenshot
6. Build Submission with EAS
# Install EAS CLI
npm install -g eas-cli
# Login to Expo account
eas login
# Configure EAS
eas build:configure
# Build for iOS
eas build --platform ios --profile production
# Submit to App Store
eas submit --platform ios
7. TestFlight (Beta Testing)
1. Build is automatically available in TestFlight after processing
2. Add internal testers (up to 100)
3. Add external testers (up to 10,000)
4. External testing requires Beta App Review
Google Play Store (Android)
1. Google Play Developer Account Setup
1. Go to https://play.google.com/console
2. Pay one-time $25 registration fee
3. Complete account verification
4. Set up payments profile (for paid apps/IAP)
2. Create App in Play Console
- Go to "All apps" β "Create app"
- Fill in:
- App name
- Default language
- App or game
- Free or paid
- Declarations (policies)
3. Store Listing
Main Store Listing
App name: Max 30 characters
Short description: Max 80 characters
Full description: Max 4000 characters
App icon: 512 x 512 px (PNG, 32-bit)
Feature graphic: 1024 x 500 px
Screenshots
| Type | Size | Required |
|---|---|---|
| Phone | 16:9 or 9:16 | Min 2, Max 8 |
| 7" Tablet | 16:9 or 9:16 | If tablet supported |
| 10" Tablet | 16:9 or 9:16 | If tablet supported |
Requirements:
- Minimum: 320px
- Maximum: 3840px
- PNG or JPEG
- No alpha transparency
4. App Content
Privacy Policy
1. Go to "Policy" β "App content"
2. Add Privacy policy URL
3. Must be accessible and specific to your app
Ads Declaration
Select: "Yes, my app contains ads" or "No, my app doesn't contain ads"
Content Rating
1. Start questionnaire
2. Answer questions about:
- Violence
- Sexual content
- Language
- Controlled substances
- Miscellaneous
3. Receive ratings (ESRB, PEGI, etc.)
Target Audience
1. Select age groups your app targets
2. If targeting children:
- Must comply with COPPA
- Additional restrictions apply
Data Safety
Data Collection:
- List all data types collected
- Specify if data is encrypted
- Specify if users can request deletion
Data Sharing:
- List third parties data is shared with
- Purpose of sharing
Security Practices:
- Data encryption in transit
- Data deletion request mechanism
5. In-App Products (if applicable)
- Go to "Monetize" β "Products" β "In-app products"
- For each product:
- Product ID (must match RevenueCat)
- Name and description
- Price
- Activate product
6. Build Submission with EAS
# Build for Android
eas build --platform android --profile production
# Submit to Google Play
eas submit --platform android
7. Testing Tracks
Internal Testing:
- Up to 100 testers
- Immediate availability
- No review required
Closed Testing:
- Limited users via email list
- Review required
- Good for beta testing
Open Testing:
- Anyone can join
- Review required
- Good for public beta
Production:
- Full release
- Full review
Common Rejection Reasons
App Store (iOS)
| Reason | Solution |
|---|---|
| Crashes/Bugs | Test thoroughly on all device sizes |
| Incomplete Information | Fill all required metadata fields |
| Placeholder Content | Remove all lorem ipsum and test data |
| Broken Links | Verify all URLs work |
| Login Issues | Provide valid demo credentials |
| Missing Restore Purchases | Implement restore button for IAP |
| Guideline 4.2 - Minimum Functionality | Ensure app provides value |
| Guideline 5.1.1 - Data Collection | Add proper privacy disclosures |
Google Play Store (Android)
| Reason | Solution |
|---|---|
| Policy Violation | Review all Google Play policies |
| Metadata Issues | No misleading descriptions/screenshots |
| Privacy Policy | Must be accessible and complete |
| Permissions | Only request necessary permissions |
| Target API Level | Must target recent Android API |
| Data Safety | Complete data safety form accurately |
Post-Submission
Monitoring
App Store Connect:
- Check "Activity" tab for build status
- Monitor "Resolution Center" for issues
- View crash reports in "Analytics"
Google Play Console:
- Check "Release" β "Production" for status
- Monitor "Android Vitals" for crashes
- View "Ratings and reviews"
Update Process
# Increment version in app.json
{
"expo": {
"version": "1.1.0"
}
}
# Build new version
eas build --platform all --profile production
# Submit update
eas submit --platform all
App Store Optimization (ASO)
Keywords (iOS):
- 100 character limit
- Comma-separated
- No spaces after commas
- Don't repeat app name
Title & Description:
- Include primary keywords
- Focus on benefits
- Use bullet points for features
- Localize for target markets
Reviews:
- Respond to all reviews
- Ask happy users to rate
- Address negative feedback
EAS Configuration
eas.json Example
{
"cli": {
"version": ">= 5.0.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": false
}
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": {
"appleId": "your-apple-id@email.com",
"ascAppId": "123456789",
"appleTeamId": "XXXXXXXXXX"
},
"android": {
"serviceAccountKeyPath": "./google-service-account.json",
"track": "production"
}
}
}
}
Resources
Build from a production-ready foundation
Prefer this pattern already implemented?
Expo Boilerplate includes the production integrations, project structure and step-by-step documentation so you can focus on your product.
One-time payment Β· Lifetime updates Β· 7-day refund