Skip to main content

Overview

Quest Hunter is built with Expo and can be deployed to multiple platforms:
  • iOS: App Store and TestFlight
  • Android: Google Play Store and APK distribution
  • Web: Static web deployment
This guide covers the deployment process using Expo Application Services (EAS).

Prerequisites

1

Install Node.js and Bun

Quest Hunter requires specific runtime versions:
  • Node.js >= 24.14.0
  • Bun 1.3.9 (package manager)
# Check versions
node --version
bun --version
2

Install EAS CLI

Install the Expo Application Services CLI globally:
npm install -g eas-cli
Verify installation:
eas --version
# Should be >= 18.0.5
3

Create Expo Account

Sign up for an Expo account at expo.dev if you don’t have one.Login to EAS:
eas login
4

Configure Environment Variables

Create a .env file based on .env.example:
cp .env.example .env
Configure the following required variables:
# Convex Backend
CONVEX_DEPLOYMENT=your-deployment-name
EXPO_PUBLIC_CONVEX_URL=https://your-deployment.convex.cloud
EXPO_PUBLIC_CONVEX_SITE_URL=https://your-deployment.convex.site

# Clerk Authentication
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_JWT_ISSUER_DOMAIN=your-domain.clerk.accounts.dev
CLERK_WEBHOOK_SECRET=whsec_...
These environment variables are required for the app to function. Make sure to configure them before building.
5

Apple Developer Account (iOS only)

For iOS deployment, you need:
  • Apple Developer Program membership ($99/year)
  • Apple ID with 2FA enabled
  • App Store Connect access
6

Google Play Console Account (Android only)

For Android deployment, you need:
  • Google Play Console account ($25 one-time fee)
  • Payment profile set up

Project Configuration

App Identifiers

Quest Hunter is configured with the following identifiers:
  • iOS Bundle ID: com.levinbaenninger.questhunter
  • Android Package: com.levinbaenninger.questhunter
  • App Name: quest-hunter
  • App Scheme: questhunter://

EAS Project

The app is linked to EAS project:
Project ID: 05cc8c91-3a53-4658-a58d-24ec09f5b51c

Build Profiles

Quest Hunter uses the following build profiles defined in eas.json:
Internal development builds with dev client enabled:
{
  "developmentClient": true,
  "distribution": "internal"
}

Platform-Specific Permissions

Android Permissions

Quest Hunter requires the following Android permissions:
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
These are configured in app.json and are required for the map and location features.

iOS Info.plist

Location permission message:
Allow Quest Hunter to use your location
Encryption declaration:
ITSAppUsesNonExemptEncryption: false

Required API Keys

Google Maps API Key

The Google Maps API key in app.json is currently hardcoded. For production deployment, you should:
  1. Generate your own API key from Google Cloud Console
  2. Restrict the API key to your app’s bundle ID/package name
  3. Update the key in app.json under android.config.googleMaps.apiKey
Current configuration:
"android": {
  "config": {
    "googleMaps": {
      "apiKey": "AIzaSyC0_rhFvjF2ui609lI7IYaUGmuOptp5Xp0"
    }
  }
}

Next Steps

iOS Deployment

Deploy to App Store and TestFlight

Android Deployment

Deploy to Google Play Store

Web Deployment

Deploy web version with static export

Troubleshooting

EAS CLI Version Issues

If you encounter version conflicts, ensure your EAS CLI version is >= 18.0.5:
eas upgrade

Environment Variable Issues

Environment variables prefixed with EXPO_PUBLIC_ are bundled into your app at build time. Changes to these variables require rebuilding the app.
Non-prefixed variables are used during build time only.

Build Failures

Check the EAS build logs:
eas build:list
eas build:view [BUILD_ID]

Build docs developers (and LLMs) love