App Store Deployment Guide
Complete guide for deploying HiveJournal mobile app to iOS App Store and Google Play Store.
Table of Contents
- Pre-Deployment Checklist
- App Configuration
- Assets Preparation
- iOS App Store
- Google Play Store
- Post-Deployment
Pre-Deployment Checklist
Code Readiness
- All features tested and working
- No console.log statements in production code
- Error handling implemented
- Loading states for all async operations
- Offline error messages user-friendly
- No hardcoded API URLs (use environment variables)
- Analytics/tracking configured (if needed)
- Privacy policy URL configured
- Terms of service URL configured
Testing
- Test on physical iOS device
- Test on physical Android device
- Test on multiple screen sizes
- Test in dark mode
- Test with poor network conditions
- Test authentication flow
- Test all CRUD operations
- Test edge cases (empty states, errors)
- Performance testing (no lag, smooth scrolling)
Legal & Compliance
- Privacy policy created and hosted
- Terms of service created and hosted
- App Store guidelines reviewed
- Content rating determined
- Age rating appropriate
- Data collection disclosed (if any)
App Configuration
1. Update app.json
Edit apps/mobile/app.json:
{
"expo": {
"name": "HiveJournal",
"slug": "hivejournal",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "automatic",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.hivejournal.app",
"buildNumber": "1",
"infoPlist": {
"NSPhotoLibraryUsageDescription": "Allow HiveJournal to access your photos to add images to journal entries.",
"NSCameraUsageDescription": "Allow HiveJournal to access your camera to take photos for journal entries."
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.hivejournal.app",
"versionCode": 1,
"permissions": [
"CAMERA",
"READ_EXTERNAL_STORAGE",
"WRITE_EXTERNAL_STORAGE"
]
},
"web": {
"favicon": "./assets/favicon.png"
},
"scheme": "hivejournal",
"privacy": "public",
"sdkVersion": "54.0.0",
"platforms": ["ios", "android", "web"],
"extra": {
"eas": {
"projectId": "your-project-id-here"
}
}
}
}
2. Create EAS Project
cd apps/mobile
npx eas init
This will:
- Create an
eas.jsonfile - Link your project to Expo's servers
- Generate a project ID
3. Configure EAS Build
Create/update apps/mobile/eas.json:
{
"cli": {
"version": ">= 5.9.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": true
}
},
"production": {
"autoIncrement": true,
"env": {
"EXPO_PUBLIC_SUPABASE_URL": "your-production-supabase-url",
"EXPO_PUBLIC_SUPABASE_ANON_KEY": "your-production-anon-key",
"EXPO_PUBLIC_API_URL": "https://your-backend.railway.app"
}
}
},
"submit": {
"production": {}
}
}
4. Environment Variables
Important: Set production environment variables in EAS:
# Set Supabase URL
eas secret:create --scope project --name EXPO_PUBLIC_SUPABASE_URL --value "https://your-project.supabase.co" --type string
# Set Supabase Anon Key
eas secret:create --scope project --name EXPO_PUBLIC_SUPABASE_ANON_KEY --value "your-anon-key" --type string
# Set API URL
eas secret:create --scope project --name EXPO_PUBLIC_API_URL --value "https://your-backend.railway.app" --type string
Or set them in eas.json under build.production.env (less secure but simpler).
Assets Preparation
Required Assets
iOS App Store
- App Icon: 1024x1024px PNG (no transparency)
- Screenshots (required):
- iPhone 6.7" (iPhone 14 Pro Max): 1290x2796px
- iPhone 6.5" (iPhone 11 Pro Max): 1242x2688px
- iPhone 5.5" (iPhone 8 Plus): 1242x2208px
- iPad Pro 12.9": 2048x2732px
- iPad Pro 11": 1668x2388px
- App Preview Videos (optional but recommended):
- Same sizes as screenshots
- 15-30 seconds
- Show key features
Google Play Store
- App Icon: 512x512px PNG
- Feature Graphic: 1024x500px PNG
- Screenshots (at least 2, up to 8):
- Phone: 16:9 or 9:16 aspect ratio
- Tablet: 16:9 or 9:16 aspect ratio
- Minimum: 320px width
- Maximum: 3840px width
- App Preview Videos (optional):
- YouTube link or uploaded video
- 30 seconds to 2 minutes
Creating Assets
App Icon
- Create 1024x1024px design
- Export as PNG (no transparency for iOS)
- Save as
apps/mobile/assets/icon.png
Splash Screen
- Create 1242x2436px design (or use your logo centered)
- Export as PNG
- Save as
apps/mobile/assets/splash.png
Screenshots
Option 1: Manual
- Run app on simulator/device
- Take screenshots of key screens:
- Dashboard/entries list
- Entry detail view
- Entry editor
- Settings
Option 2: Automated (Recommended)
# Install screenshot tool
npm install -g appium-doctor
# Or use Expo's built-in tools
npx expo install expo-dev-client
Screenshot Checklist:
- Dashboard with entries
- Entry detail view
- Entry editor (create mode)
- Entry editor (edit mode)
- Settings screen
- Search functionality
- Dark mode (if supported)
Asset Organization
apps/mobile/assets/
├── icon.png # 1024x1024 iOS icon
├── adaptive-icon.png # 1024x1024 Android adaptive icon
├── splash.png # 1242x2436 splash screen
├── favicon.png # Web favicon
├── screenshots/
│ ├── ios/
│ │ ├── 6.7-inch/
│ │ ├── 6.5-inch/
│ │ └── ipad/
│ └── android/
│ ├── phone/
│ └── tablet/
└── feature-graphic.png # 1024x500 Android feature graphic
iOS App Store
Prerequisites
-
Apple Developer Account
- Cost: $99/year
- Sign up at developer.apple.com
- Enroll in Apple Developer Program
-
Xcode (Mac only)
- Install from Mac App Store
- Version 14+ recommended
Step 1: Configure App Store Connect
- Go to App Store Connect
- Click "My Apps" → "+" → "New App"
- Fill in:
- Platform: iOS
- Name: HiveJournal
- Primary Language: English
- Bundle ID: com.hivejournal.app (must match app.json)
- SKU: hivejournal-ios (unique identifier)
- User Access: Full Access
Step 2: App Information
Fill in:
- Category: Productivity / Lifestyle
- Subcategory: (optional)
- Content Rights: Confirm you have rights
- Age Rating: Complete questionnaire
- App Privacy: Configure data collection (if any)
Step 3: Pricing and Availability
- Set price (Free or Paid)
- Select countries/regions
- Set availability date
Step 4: Prepare App Listing
Required Information:
- App Name: HiveJournal (30 characters max)
- Subtitle: Beautiful journaling experience (30 characters max)
- Description:
HiveJournal is a beautiful, intuitive journaling app designed to help you capture your thoughts, memories, and experiences. Features: • Beautiful, distraction-free writing experience • Organize entries with tags and notebooks • Track your mood with each entry • Search through your journal entries • Custom fonts and backgrounds • AI-powered background generation • Moon phase indicators • Dark mode support Start your journaling journey today. - Keywords: journal, diary, writing, notes, mindfulness, reflection
- Support URL: https://hivejournal.com/support
- Marketing URL: https://hivejournal.com (optional)
- Privacy Policy URL: https://hivejournal.com/privacy (required)
Step 5: Build and Submit
Build for iOS
cd apps/mobile
# Build for iOS App Store
eas build --platform ios --profile production
This will:
- Create a build on Expo's servers
- Generate an
.ipafile - Take 10-20 minutes
Submit to App Store
# Submit the build
eas submit --platform ios
You'll be prompted to:
- Select the build to submit
- Enter App Store Connect credentials
- Confirm submission
Alternative: Manual Submission
- Download the
.ipafrom EAS dashboard - Use Transporter app (Mac) or Application Loader
- Upload the
.ipafile - Go to App Store Connect → Your App → TestFlight/App Store
- Select the build
- Submit for review
Step 6: App Store Review
Review Process:
- Processing: 1-2 hours
- In Review: 1-3 days (usually 24-48 hours)
- Pending Developer Release: You can release immediately or schedule
- Ready for Sale: App is live!
Common Rejection Reasons:
- Missing privacy policy
- App crashes on launch
- Missing required permissions descriptions
- Incomplete app information
- Guideline violations
Tips for Approval:
- Test thoroughly before submitting
- Provide demo account if login required
- Include detailed review notes
- Respond quickly to reviewer questions
Google Play Store
Prerequisites
- Google Play Developer Account
- Cost: $25 one-time fee
- Sign up at play.google.com/console
Step 1: Create App
- Go to Google Play Console
- Click "Create app"
- Fill in:
- App name: HiveJournal
- Default language: English (United States)
- App or game: App
- Free or paid: Free
- Declarations: Check all that apply
Step 2: App Details
Store Listing:
- App name: HiveJournal (50 characters max)
- Short description: Beautiful journaling app (80 characters max)
- Full description:
HiveJournal is a beautiful, intuitive journaling app designed to help you capture your thoughts, memories, and experiences. Features: • Beautiful, distraction-free writing experience • Organize entries with tags and notebooks • Track your mood with each entry • Search through your journal entries • Custom fonts and backgrounds • AI-powered background generation • Moon phase indicators • Dark mode support Start your journaling journey today. - App icon: Upload 512x512px
- Feature graphic: Upload 1024x500px
- Screenshots: Upload at least 2 (up to 8)
- App category: Productivity
- Contact details: Support email, website
- Privacy policy: https://hivejournal.com/privacy (required)
Step 3: Content Rating
- Complete content rating questionnaire
- Answer questions about app content
- Get rating (usually "Everyone")
Step 4: Target Audience
- Set target age range
- Complete data safety section
- Declare data collection practices
Step 5: Build and Submit
Build for Android
cd apps/mobile
# Build for Google Play Store
eas build --platform android --profile production
This will:
- Create a build on Expo's servers
- Generate an
.aab(Android App Bundle) file - Take 10-20 minutes
Submit to Play Store
# Submit the build
eas submit --platform android
You'll be prompted to:
- Select the build to submit
- Enter Google Play credentials
- Confirm submission
Alternative: Manual Submission
- Download the
.aabfrom EAS dashboard - Go to Google Play Console → Your App → Production
- Click "Create new release"
- Upload the
.aabfile - Add release notes
- Review and roll out
Step 6: Play Store Review
Review Process:
- Processing: 1-3 hours
- Under review: 1-7 days (usually 1-3 days)
- Published: App is live!
Common Rejection Reasons:
- Missing privacy policy
- App crashes
- Policy violations
- Incomplete store listing
- Missing required information
Post-Deployment
Monitoring
-
Analytics Setup (Optional but recommended)
- Firebase Analytics
- Mixpanel
- Amplitude
-
Crash Reporting
- Sentry
- Firebase Crashlytics
-
User Feedback
- In-app feedback form
- Support email
- App Store reviews monitoring
Updates
For Updates:
-
Update version in
app.json:{ "version": "1.0.1", // Increment version "ios": { "buildNumber": "2" // Increment build number }, "android": { "versionCode": 2 // Increment version code } } -
Build new version:
eas build --platform ios --profile production eas build --platform android --profile production -
Submit updates:
eas submit --platform ios eas submit --platform android
OTA Updates (Expo Updates)
For JavaScript-only updates (no native changes):
# Publish update
eas update --branch production --message "Bug fixes and improvements"
Users will get the update automatically (no app store review needed).
Quick Reference Commands
# Initialize EAS
npx eas init
# Configure build
eas build:configure
# Build for iOS
eas build --platform ios --profile production
# Build for Android
eas build --platform android --profile production
# Submit to App Store
eas submit --platform ios
# Submit to Play Store
eas submit --platform android
# Publish OTA update
eas update --branch production --message "Update message"
# View builds
eas build:list
# View submissions
eas submit:list
Timeline Estimate
-
Preparation: 1-2 days
- Assets creation
- App configuration
- Testing
-
First Build: 1-2 hours
- Build time: 10-20 minutes per platform
- Testing builds: 1-2 hours
-
App Store Review: 1-3 days
- iOS: Usually 24-48 hours
- Android: Usually 1-3 days
-
Total Time to Live: 3-7 days from start to finish
Resources
- Expo EAS Build Docs
- Expo EAS Submit Docs
- Apple App Store Review Guidelines
- Google Play Policy
- App Store Connect
- Google Play Console
Support
If you encounter issues:
- Check Expo documentation
- Check EAS build logs
- Review App Store/Play Store rejection reasons
- Test on physical devices
- Check environment variables are set correctly
Good luck with your app store submission! 🚀