t1k:rn:performance:deployment
| Field | Value |
|---|---|
| Module | performance |
| Version | 1.6.3 |
| Effort | high |
| Tools | — |
Keywords: app store, CodePush, deployment, EAS build, OTA, react native
How to invoke
Section titled “How to invoke”/t1k:rn:performance:deploymentRN Performance Deployment
Section titled “RN Performance Deployment”EAS Build Profiles
Section titled “EAS Build Profiles”{ "cli": { "version": ">= 10.0.0" }, "build": { "development": { "developmentClient": true, "distribution": "internal", "ios": { "simulator": true } }, "preview": { "distribution": "internal", "android": { "buildType": "apk" } }, "production": { "autoIncrement": true } }, "submit": { "production": { "ios": { "appleId": "$(APPLE_ID)", "ascAppId": "$(ASC_APP_ID)" }, "android": { "serviceAccountKeyPath": "./service-account.json" } } }}Build Commands
Section titled “Build Commands”# Development build (replaces Expo Go for native modules)eas build --profile development --platform ioseas build --profile development --platform android
# Preview (internal distribution)eas build --profile preview --platform all
# Productioneas build --profile production --platform all
# Submit to storeseas submit --platform ioseas submit --platform androidOTA Updates (expo-updates)
Section titled “OTA Updates (expo-updates)”import * as Updates from 'expo-updates';
// Check and apply updateasync function checkForUpdate() { try { const update = await Updates.checkForUpdateAsync(); if (update.isAvailable) { await Updates.fetchUpdateAsync(); await Updates.reloadAsync(); // restart app } } catch (e) { console.error('Update check failed:', e); }}# Publish OTA update (no store review needed for JS changes)eas update --branch production --message "Fix crash on login"App Version Management
Section titled “App Version Management”// app.json — auto-increment via EAS{ "expo": { "version": "1.2.0", "ios": { "buildNumber": "42" }, "android": { "versionCode": 42 } }}Key Rules
Section titled “Key Rules”developmentprofile requires dev client — build once, iterate with OTA- OTA updates only cover JS bundle — native code changes require full store build
- Always set
autoIncrement: truein production profile — prevents version conflicts - Use
eas secret:createfor API keys — never hardcode ineas.json
Gotchas
Section titled “Gotchas”Updates.reloadAsync()restarts immediately — save any pending state before calling- OTA update channels must match: branch
production→ app built withproductionprofile - App Store review takes 1-3 days — plan OTA strategy for hotfixes
eas build --localrequires Docker — use for debugging build issues
Security
Section titled “Security”- Store signing credentials in EAS — never commit keystores or provisioning profiles to git
- Use
eas secretfor all CI/CD secrets (API keys, tokens) - Enable certificate pinning for production API calls