This document describes the build profiles, environment expectations, and preflight checks for releasing GuildPass Mobile.
| Property | Value |
|---|---|
| Channel | development |
| Distribution | Internal (Expo Go / dev client) |
| iOS Config | Debug |
| Android Build Type | APK |
| API URL | http://localhost:3000 |
| Chain ID | 11155111 (Sepolia) |
| App Env | development |
Purpose: Local development and testing on physical devices via Expo Go or a development build.
Usage:
eas build --profile development --platform all| Property | Value |
|---|---|
| Channel | preview |
| Distribution | Internal (TestFlight / Internal Track) |
| iOS Config | Release |
| Android Build Type | App Bundle (AAB) |
| API URL | https://staging.guildpass.xyz |
| Chain ID | 11155111 (Sepolia) |
| App Env | preview |
Purpose: Share with testers and stakeholders for QA before production release.
Usage:
eas build --profile preview --platform all
eas submit --profile preview --platform ios # TestFlight
eas submit --profile preview --platform android| Property | Value |
|---|---|
| Channel | production |
| Distribution | Store (App Store / Play Store) |
| iOS Config | Release |
| Android Build Type | App Bundle (AAB) |
| API URL | https://api.guildpass.xyz |
| Chain ID | 1 (Ethereum Mainnet) |
| App Env | production |
Purpose: Public release to the App Store and Google Play Store.
Usage:
eas build --profile production --platform all
eas submit --profile production --platform ios
eas submit --profile production --platform android| Variable | Development | Preview | Production |
|---|---|---|---|
EXPO_PUBLIC_API_URL |
http://localhost:3000 |
https://staging.guildpass.xyz |
https://api.guildpass.xyz |
EXPO_PUBLIC_CHAIN_ID |
11155111 |
11155111 |
1 |
EXPO_PUBLIC_APP_ENV |
development |
preview |
production |
EXPO_PUBLIC_WALLET_CONNECT_PROJECT_ID |
(optional - local only) | (set in EAS Secrets) | (set in EAS Secrets) |
Environment variables prefixed with
EXPO_PUBLIC_are exposed to the client. Sensitive values (API keys, service accounts) must be configured as EAS Secrets — never in.envfiles committed to the repository.
These must be configured in the EAS dashboard or your CI/CD provider:
| Secret | Purpose |
|---|---|
EXPO_TOKEN |
EAS API token for CI/CD authentication |
EXPO_PUBLIC_WALLET_CONNECT_PROJECT_ID |
WalletConnect v2 project ID (production) |
APPLE_APP_SPECIFIC_PASSWORD |
App Store Connect app-specific password |
GCP_SERVICE_ACCOUNT_KEY |
Google Play Console service account key (JSON) |
Before cutting a release, run through each item:
-
pnpm typecheckpasses with zero errors -
pnpm lintpasses with zero warnings -
pnpm test:run— all tests green -
pnpm formathas been run (no unformatted files)
-
.env.exampleis up to date with any new variables - All required EAS Secrets are set in the Expo dashboard
- EAS project ID in
app.jsonmatches the Expo project -
runtimeVersionpolicy is correct inapp.json -
versioninapp.jsonandpackage.jsonare bumped appropriately
- Preview build completes successfully on both platforms
- Smoke-test the preview build on physical devices (iOS + Android)
- Verify deep links (
guildpass://) work correctly - Verify API connectivity with the target environment
- Staging
.envvalues match the target preview environment - Production
.envvalues match the target production environment - App icons and splash screen assets are final
- Privacy policy and terms URLs are correct in App Store / Play Store listing
- Release notes / changelog are prepared
- App Store Connect / Google Play Console listing is up to date
- Version code (Android) and build number (iOS) are incremented
- Production build submitted and approved
- Semantic Versioning (
major.minor.patch) inapp.json/package.json - iOS
buildNumberand AndroidversionCodeauto-increment via EAS (configure"autoIncrement": trueineas.jsonif desired) - Align
runtimeVersionpolicy withappVersionso OTA updates are delivered per version
OTA updates are delivered through the channel matching the build profile:
| Channel | Audience |
|---|---|
development |
Developers |
preview |
Internal testers |
production |
All users |
Publish an update:
eas update --branch preview --message "fix: resolve login crash"Updates are scoped to the runtimeVersion — any native code change requires a new store build.