| name | revonc-eas-deploy |
| description | RevOnc mobile app EAS deployment guide. Build, deploy, and publish OTA updates for iOS/Android via Expo Application Services. Use for "/eas", "deploy to testflight", "push ota update", or "build ios/android". |
RevOnc EAS Deployment
Complete guide for deploying the RevOnc mobile app through EAS (Expo Application Services).
Account & Project Identity
| Property | Value |
|---|
| Account | revonc |
| Project | @revonc/RevOnc |
| Project ID | 2c936c80-d59b-480b-aad7-77fcba4c01cf |
| EAS CLI Version | 16.16.0+ required |
Dashboard Links
Build Profiles Overview
┌─────────────────────────────────────────────────────────────────────────────┐
│ EAS BUILD PROFILES │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ development preview testflight-internal testflight │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ ┌─────────┐│
│ │ Simulator│ │ Internal │ │ Internal │ │External ││
│ │ + Debug │ │ QA │ │ Beta Testers │ │ Beta ││
│ │ Client │ │ │ │ (staging) │ │ (prod) ││
│ └──────────┘ └──────────┘ └──────────────┘ └─────────┘│
│ │
│ Channel: Channel: Channel: Channel: │
│ development preview staging production │
│ │
│ Purpose: Purpose: Purpose: Purpose: │
│ - Local dev - APK/IPA QA - Revonc_team (5) - Pilot (102)│
│ - Metro bundler - Internal test - Test OTA first - Production │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| Profile | Distribution | Channel | iOS | Android | Purpose |
|---|
development | Internal | development | Simulator | APK | Local debugging |
development:device | Internal | development | Device | APK | Physical device debugging |
local | Internal | — | Simulator | APK | Fast local builds (no channel) |
preview | Internal | preview | Default | Default | Internal QA |
testflight-internal | Store | staging | — | — | Internal beta (Revonc_team) |
testflight | Store | production | — | — | External beta (Pilot) |
production | — | production | — | App Bundle | Store release |
Quick Commands
Check Status
eas whoami
eas project:info
eas build:list --limit 10
eas channel:list
eas update:list --branch production --limit 5
Build Commands
eas build --profile testflight-internal --platform ios --auto-submit
eas build --profile testflight --platform ios --auto-submit
eas build --profile preview --platform android
eas build --profile production
eas submit --profile production
OTA Updates (Over-The-Air)
eas update --channel staging --message "description"
eas update --channel production --message "description"
eas update:rollback --channel production
TestFlight Distribution
Two-Channel Strategy
| Profile | Channel | TestFlight Group | Purpose |
|---|
testflight-internal | staging | Revonc_team (5 internal) | Test OTA updates first |
testflight | production | Pilot (102 external) | Stable, verified updates |
Staged Publishing Workflow
1. Push to staging → eas update --channel staging --message "..."
└─► Revonc_team (5 internal testers) receives update
2. Verify update works (test in app)
3. Push to production → eas update --channel production --message "..."
└─► Pilot (102 external testers) + App Store users receive update
Build & Submit Commands
eas build --profile testflight-internal --platform ios --auto-submit
eas build --profile testflight --platform ios --auto-submit
Channel vs Profile Names
⚠️ CRITICAL: Profile names ≠ Channel names
Build Profile → Embedded Channel
─────────────────────────────────────────
development → development
preview → preview
testflight-internal → staging
testflight → production ← NOT "testflight"!
production → production
WRONG:
eas update --channel testflight --message "Fix"
CORRECT:
eas update --channel production --message "Fix"
OTA vs App Store Releases
| Change Type | Method | Command |
|---|
| Bug fix (JS only) | OTA | eas update --channel production |
| New feature (JS only) | OTA | eas update --channel production |
| New native module | App Store | eas build --profile testflight |
| SDK upgrade | App Store | eas build --profile testflight |
| App icon/splash change | App Store | eas build --profile testflight |
App Configuration
Current values from app.config.js:
| Property | iOS | Android |
|---|
| Bundle ID / Package | be.revonc.mobileapp | be.revonc.mobileapp |
| Version | 1.0.0 | 1.0.0 |
| Build Number | 102 (manual increment) | Version Code: 18 |
| Apple Team ID | J6V6MWLU44 | — |
| Expo SDK | 52.0.48 | 52.0.48 |
| Runtime Version | 1.0.0 | 1.0.0 |
Incrementing Build Number
For new TestFlight submissions, increment buildNumber in app.config.js:
ios: {
buildNumber: "103",
}
Local TestFlight Builds (Free)
Build and submit to TestFlight without EAS costs (requires Mac with Xcode):
./scripts/deploy-testflight.sh
./scripts/deploy-testflight.sh --skip-prebuild
First-Time Setup
- Create App Store Connect API Key (appstoreconnect.apple.com → Users and Access → Keys)
- Download
.p8 file to ~/.appstoreconnect/private_keys/
- Create
.env.local with credentials:
API_KEY_ID=your-key-id-here
API_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
APPLE_TEAM_ID=your-team-id-here
⚠️ WARNING: Local builds do NOT embed EAS channels. Users on local builds cannot receive OTA updates!
Submit Configuration
iOS (App Store Connect)
| Apple ID | ASC App ID |
|---|
tech@revonc.be | 6752873821 |
Android (Play Store)
| Service Account | Track |
|---|
./service-account-file.json | internal |
Troubleshooting
OTA Updates Not Received
- Verify channel in
eas.json matches update target
- Check runtime version compatibility (
1.0.0)
- Have users close app completely and reopen twice
Build Failures
eas build --clear-cache --profile <profile> --platform <platform>
eas build:view <build-id>
Credential Issues
eas credentials --platform ios
eas credentials --platform android
Users Not Getting Updates
- Check if binary was built with correct channel:
- EAS build → has channel → receives OTA
- Local build → NO channel → cannot receive OTA
- Verify user is on correct TestFlight group
- Check
eas update:list --branch production
Pre-Deployment Checklist
## RevOnc Mobile Release Checklist
### Code Readiness
- [ ] All tests pass: npm run test:run
- [ ] Linters pass: npm run lint && npm run typecheck
- [ ] No console errors in app
### Testing
- [ ] Feature tested on iOS Simulator
- [ ] Feature tested on Android Emulator
- [ ] OTA pushed to staging first
- [ ] Revonc_team verified update works
### Release
- [ ] Build number incremented (if new binary)
- [ ] Commit message clear
- [ ] OTA pushed to production
Triggers
/eas
/revonc-deploy
- "deploy to testflight"
- "push ota update"
- "build ios"
- "build android"
- "publish to app store"
- "eas build"
- "eas update"