mobile

App Store Deployment Guide

Complete guide for deploying HiveJournal mobile app to iOS App Store and Google Play Store.

Table of Contents

  1. Pre-Deployment Checklist
  2. App Configuration
  3. Assets Preparation
  4. iOS App Store
  5. Google Play Store
  6. 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)
  • 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.json file
  • 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

  1. App Icon: 1024x1024px PNG (no transparency)
  2. 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
  3. App Preview Videos (optional but recommended):
    • Same sizes as screenshots
    • 15-30 seconds
    • Show key features

Google Play Store

  1. App Icon: 512x512px PNG
  2. Feature Graphic: 1024x500px PNG
  3. 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
  4. App Preview Videos (optional):
    • YouTube link or uploaded video
    • 30 seconds to 2 minutes

Creating Assets

App Icon

  1. Create 1024x1024px design
  2. Export as PNG (no transparency for iOS)
  3. Save as apps/mobile/assets/icon.png

Splash Screen

  1. Create 1242x2436px design (or use your logo centered)
  2. Export as PNG
  3. 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

  1. Apple Developer Account

  2. Xcode (Mac only)

    • Install from Mac App Store
    • Version 14+ recommended

Step 1: Configure App Store Connect

  1. Go to App Store Connect
  2. Click "My Apps" → "+" → "New App"
  3. 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:

  1. App Name: HiveJournal (30 characters max)
  2. Subtitle: Beautiful journaling experience (30 characters max)
  3. 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.
    
  4. Keywords: journal, diary, writing, notes, mindfulness, reflection
  5. Support URL: https://hivejournal.com/support
  6. Marketing URL: https://hivejournal.com (optional)
  7. 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 .ipa file
  • Take 10-20 minutes

Submit to App Store

# Submit the build
eas submit --platform ios

You'll be prompted to:

  1. Select the build to submit
  2. Enter App Store Connect credentials
  3. Confirm submission

Alternative: Manual Submission

  1. Download the .ipa from EAS dashboard
  2. Use Transporter app (Mac) or Application Loader
  3. Upload the .ipa file
  4. Go to App Store Connect → Your App → TestFlight/App Store
  5. Select the build
  6. Submit for review

Step 6: App Store Review

Review Process:

  1. Processing: 1-2 hours
  2. In Review: 1-3 days (usually 24-48 hours)
  3. Pending Developer Release: You can release immediately or schedule
  4. 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

  1. Google Play Developer Account

Step 1: Create App

  1. Go to Google Play Console
  2. Click "Create app"
  3. 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:

  1. App name: HiveJournal (50 characters max)
  2. Short description: Beautiful journaling app (80 characters max)
  3. 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.
    
  4. App icon: Upload 512x512px
  5. Feature graphic: Upload 1024x500px
  6. Screenshots: Upload at least 2 (up to 8)
  7. App category: Productivity
  8. Contact details: Support email, website
  9. Privacy policy: https://hivejournal.com/privacy (required)

Step 3: Content Rating

  1. Complete content rating questionnaire
  2. Answer questions about app content
  3. 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:

  1. Select the build to submit
  2. Enter Google Play credentials
  3. Confirm submission

Alternative: Manual Submission

  1. Download the .aab from EAS dashboard
  2. Go to Google Play Console → Your App → Production
  3. Click "Create new release"
  4. Upload the .aab file
  5. Add release notes
  6. Review and roll out

Step 6: Play Store Review

Review Process:

  1. Processing: 1-3 hours
  2. Under review: 1-7 days (usually 1-3 days)
  3. Published: App is live!

Common Rejection Reasons:

  • Missing privacy policy
  • App crashes
  • Policy violations
  • Incomplete store listing
  • Missing required information

Post-Deployment

Monitoring

  1. Analytics Setup (Optional but recommended)

    • Firebase Analytics
    • Mixpanel
    • Amplitude
  2. Crash Reporting

    • Sentry
    • Firebase Crashlytics
  3. User Feedback

    • In-app feedback form
    • Support email
    • App Store reviews monitoring

Updates

For Updates:

  1. Update version in app.json:

    {
      "version": "1.0.1",  // Increment version
      "ios": {
        "buildNumber": "2"  // Increment build number
      },
      "android": {
        "versionCode": 2  // Increment version code
      }
    }
    
  2. Build new version:

    eas build --platform ios --profile production
    eas build --platform android --profile production
    
  3. 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


Support

If you encounter issues:

  1. Check Expo documentation
  2. Check EAS build logs
  3. Review App Store/Play Store rejection reasons
  4. Test on physical devices
  5. Check environment variables are set correctly

Good luck with your app store submission! 🚀

APP STORE DEPLOYMENT — Docs | HiveJournal