Skip to main content

Overview

Once you’ve built NearYou, you can deploy it to app stores and web hosting platforms. This guide covers deployment workflows for all three platforms.

Deployment Checklist

Before deploying to production:
1

Test thoroughly

  • Test on physical devices (iOS and Android)
  • Verify all features work in production mode
  • Check performance and bundle size
  • Test deep linking with nearyou:// scheme
2

Update version

Increment version in app.json:
{
  "expo": {
    "version": "1.0.1"
  }
}
3

Review configuration

  • App name and description
  • Icons and splash screens
  • Privacy policy URL (if required)
  • Permissions and capabilities
4

Code quality checks

npm run lint
npx tsc --noEmit

iOS App Store Deployment

Prerequisites

Apple Developer Account

$99/year membership requireddeveloper.apple.com

App Store Connect

Create app listing at appstoreconnect.apple.com

Certificates

Distribution certificate and provisioning profile(EAS handles this automatically)

macOS + Xcode

Required for local buildsNot needed with EAS Build
1

Build production app

eas build --platform ios --profile production
Wait for build to complete (10-30 minutes).
2

Configure submission

eas submit --platform ios
EAS will prompt for:
  • Apple ID credentials
  • App-specific password (generate at appleid.apple.com)
  • App Store Connect API key (optional, recommended)
3

Submit to App Store

EAS automatically:
  • Uploads IPA to App Store Connect
  • Handles app metadata
  • Validates the build
4

Complete App Store listing

In App Store Connect:
  • Add screenshots (required for all device sizes)
  • Write app description
  • Set pricing and availability
  • Submit for review
Apple review typically takes 24-48 hours. Check status at appstoreconnect.apple.com.

iOS Configuration Requirements

Update app.json with required iOS fields:
app.json
{
  "expo": {
    "ios": {
      "bundleIdentifier": "com.yourcompany.nearyou",
      "buildNumber": "1",
      "supportsTablet": true,
      "infoPlist": {
        "NSLocationWhenInUseUsageDescription": "NearYou needs your location to discover nearby places."
      }
    }
  }
}
Add bundleIdentifier before building. It must match the identifier in App Store Connect.

Screenshot Requirements

iOS App Store requires screenshots for these devices:
  • 6.7” Display (iPhone 15 Pro Max): 1290 × 2796 pixels
  • 6.5” Display (iPhone 11 Pro Max): 1242 × 2688 pixels
  • 5.5” Display (iPhone 8 Plus): 1242 × 2208 pixels
  • iPad Pro (12.9”): 2048 × 2732 pixels (if supporting iPad)
Use tools like AppLaunchpad or Figma templates to generate screenshots quickly.

Android Play Store Deployment

Prerequisites

Google Play Console

$25 one-time registrationplay.google.com/console

App Listing

Create app in Play Console with package name

Signing Key

Android keystore for signing(EAS manages this automatically)

Android Studio

Only needed for local builds
1

Build production app

eas build --platform android --profile production
Builds an AAB (Android App Bundle) for Play Store.
2

Create service account

In Google Play Console:
  • Go to Setup > API access
  • Create service account
  • Grant “Release Manager” permissions
  • Download JSON key
3

Submit to Play Store

eas submit --platform android
Provide the service account JSON when prompted.
4

Complete Play Store listing

In Play Console:
  • Add screenshots (required)
  • Write app description (short and full)
  • Upload feature graphic (1024 × 500 pixels)
  • Set content rating
  • Complete questionnaire
  • Submit for review
Google Play review is typically faster than Apple (often within hours to 1-2 days).

Android Configuration Requirements

Update app.json with Android fields:
app.json
{
  "expo": {
    "android": {
      "package": "com.yourcompany.nearyou",
      "versionCode": 1,
      "adaptiveIcon": {
        "backgroundColor": "#E6F4FE",
        "foregroundImage": "./assets/images/android-icon-foreground.png"
      },
      "permissions": [
        "ACCESS_FINE_LOCATION",
        "ACCESS_COARSE_LOCATION"
      ]
    }
  }
}
versionCode must be an integer that increments with each release. Use autoIncrement in EAS to handle this automatically.

Screenshot Requirements

Google Play requires:
  • Phone screenshots: At least 2, up to 8 (1080 × 1920 pixels or 16:9 ratio)
  • 7” tablet (optional): 1200 × 1920 pixels
  • 10” tablet (optional): 1600 × 2560 pixels
  • Feature graphic (required): 1024 × 500 pixels

Release Tracks

Google Play offers multiple release tracks:
For your team only. No review required.
eas submit -p android --track internal
Use internal testing first, then graduate to closed testing, open testing, and finally production.

Web Deployment

NearYou’s web configuration uses static output, making it compatible with any static hosting provider.
app.json
{
  "expo": {
    "web": {
      "output": "static",
      "favicon": "./assets/images/favicon.png"
    }
  }
}

Build Web App

npx expo export:web
Generates static files in the web-build/ directory.

Hosting Options

1

Install Vercel CLI

npm install -g vercel
2

Deploy

npx expo export:web
cd web-build
vercel --prod
Or connect your GitHub repo for automatic deployments.

Web Configuration Tips

Custom Domain

Add CNAME record pointing to your hosting provider.Most providers offer free HTTPS.

Progressive Web App

Expo web includes PWA manifest automatically.Users can “Add to Home Screen”.

SEO

Add meta.json or modify HTML template for better SEO.

Analytics

Add Google Analytics or Plausible to track usage.

Environment Management

EAS Secrets

Store sensitive data in EAS Secrets:
# Add secret
eas secret:create --name API_KEY --value your-api-key --type string

# List secrets
eas secret:list

# Use in app
import Constants from 'expo-constants';
const apiKey = Constants.expoConfig?.extra?.API_KEY;

Environment-Specific Builds

Configure different environments in eas.json:
eas.json
{
  "build": {
    "development": {
      "env": {
        "API_URL": "http://localhost:3000"
      }
    },
    "staging": {
      "env": {
        "API_URL": "https://staging-api.nearyou.com"
      }
    },
    "production": {
      "env": {
        "API_URL": "https://api.nearyou.com"
      }
    }
  }
}
Build for specific environment:
eas build --profile staging --platform all

Over-the-Air Updates

EAS Update

Push JavaScript updates without resubmitting to stores:
1

Install EAS Update

Already included if using Expo SDK 54.
2

Configure updates

In app.json:
{
  "expo": {
    "updates": {
      "url": "https://u.expo.dev/your-project-id"
    }
  }
}
3

Publish update

eas update --branch production --message "Fix login bug"
4

Users receive update

Updates download automatically on next app launch.
OTA updates only work for JavaScript changes. Native code changes (plugins, dependencies) require a new build and store submission.

Update Channels

Manage different update channels:
# Production users
eas update --branch production

# Beta testers
eas update --branch staging

# Development
eas update --branch development
Configure branches in builds:
eas.json
{
  "build": {
    "production": {
      "channel": "production"
    },
    "preview": {
      "channel": "staging"
    }
  }
}

Monitoring and Analytics

Crash Reporting

Integrate crash reporting services:

Sentry

npx expo install @sentry/react-native

Bugsnag

npm install @bugsnag/react-native

Firebase Crashlytics

npx expo install @react-native-firebase/crashlytics

User Analytics

import * as Analytics from 'expo-analytics';

Analytics.track('place_discovered', {
  placeId: '123',
  category: 'restaurant'
});

Rollback Strategy

EAS Update Rollback

If an OTA update causes issues:
# Republish previous update
eas update --branch production --message "Rollback to v1.0.0"

# Or republish specific update ID
eas update:republish --update-id abc123

App Store Rollback

For native app issues:
  1. iOS: Use “Phased Release” to limit impact, then halt rollout
  2. Android: Use staged rollout (10% → 50% → 100%), then pause if issues arise
  3. Submit hotfix build as soon as possible

Continuous Deployment

GitHub Actions Example

.github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18
      
      - name: Install dependencies
        run: npm install
      
      - name: Setup EAS
        uses: expo/expo-github-action@v8
        with:
          eas-version: latest
          token: ${{ secrets.EXPO_TOKEN }}
      
      - name: Build and submit
        run: |
          eas build --platform all --profile production --non-interactive
          eas submit --platform all --non-interactive
Store EXPO_TOKEN in GitHub Secrets. Generate at expo.dev/settings/access-tokens.

Post-Deployment

1

Monitor metrics

  • App crashes and errors
  • User engagement
  • Performance metrics
  • Store reviews and ratings
2

Respond to reviews

Engage with users on App Store and Play Store reviews.
3

Plan updates

Based on user feedback and analytics, plan next features:
  • 🗺️ Advanced place filters
  • 🏆 Achievement system
  • 💬 User reviews
  • 🌐 Multi-language support
4

Regular maintenance

  • Keep dependencies updated
  • Test on new OS versions
  • Monitor breaking changes in Expo SDK

Next Steps

Configuration

Review and optimize your app configuration

Building

Learn more about the build process and optimization

Build docs developers (and LLMs) love