Mobile
Deploy de Apps React Native: EAS Build e Submit na Prática
25 de maio de 2026·Paulo Pereira
O que é EAS?
Expo Application Services (EAS) é a infraestrutura de build em nuvem do Expo. Você envia o código, e o EAS compila o APK/IPA sem precisar de Mac ou Android Studio.
Instalação e Login
npm install -g eas-cli
eas login
eas init # Vincula ao projeto Expoeas.json: Configuração de Builds
{
"cli": {
"version": ">= 7.0.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"android": {
"buildType": "apk"
}
},
"preview": {
"distribution": "internal",
"android": {
"buildType": "apk"
},
"ios": {
"simulator": false
}
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"android": {
"serviceAccountKeyPath": "./service-account.json",
"track": "internal"
},
"ios": {
"appleId": "paulo@exemplo.com",
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345"
}
}
}
}Tipos de Build
Development Build (Substitui Expo Go)
# Cria APK com Expo Dev Client para testes com módulos nativos
eas build --profile development --platform android
# Instala no dispositivo conectado
eas build --profile development --platform android --localPreview (Teste Interno)
# APK para distribuição interna (equipe de QA)
eas build --profile preview --platform android
# Gera QR code para download
eas build --profile preview --platform allProdução
# Build assinado pronto para as stores
eas build --profile production --platform all
# Acompanhar progresso
eas build:listCertificados e Assinaturas
# Android — keystore gerenciado pelo EAS (recomendado)
eas credentials --platform android
# Selecione: "Add a new Keystore" → EAS gerencia automaticamente
# iOS — requer conta Apple Developer ($99/ano)
eas credentials --platform ios
# EAS cria certificados e provisioning profiles automaticamenteGuarde o keystore em lugar seguro! Sem ele, você não pode atualizar o app na Play Store.
OTA Updates (Over-the-Air)
Para JavaScript, você pode fazer updates sem passar pela store:
npm install expo-updates
# Publica update instantâneo (apenas JS/assets)
eas update --branch production --message "Corrige crash na tela de checkout"
# Canais por branch
eas update --branch staging --message "Nova feature em teste"// app.json — configura updates automáticos
{
"expo": {
"updates": {
"url": "https://u.expo.dev/SEU-PROJECT-ID",
"enabled": true,
"checkAutomatically": "ON_LOAD",
"fallbackToCacheTimeout": 3000
},
"runtimeVersion": {
"policy": "appVersion"
}
}
}Submit para as Stores
Google Play
# Pré-requisito: service account com permissão de upload
eas submit --platform android --profile production
# Ou especificando o build
eas submit --platform android --id BUILD_IDApple App Store
eas submit --platform ios --profile productionCI/CD com GitHub Actions
# .github/workflows/deploy.yml
name: EAS Build & Submit
on:
push:
tags: ['v*']
jobs:
build-and-submit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: Build Android
run: eas build --platform android --profile production --non-interactive
- name: Build iOS
run: eas build --platform ios --profile production --non-interactive
- name: Submit to Stores
run: eas submit --platform all --profile production --non-interactive
env:
EXPO_APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}Variáveis de Ambiente
# Variáveis no EAS (seguras)
eas secret:create --scope project --name API_URL --value "https://api.producao.com"
eas secret:create --scope project --name STRIPE_KEY --value "sk_live_..."
# No código
import Constants from 'expo-constants';
const API_URL = Constants.expoConfig?.extra?.apiUrl ?? process.env.EXPO_PUBLIC_API_URL;// app.config.js (dinâmico)
export default {
expo: {
extra: {
apiUrl: process.env.API_URL,
environment: process.env.APP_ENV ?? 'development',
},
},
};Versionamento Automático
// eas.json
{
"build": {
"production": {
"autoIncrement": true
}
}
}Isso incrementa automaticamente versionCode (Android) e buildNumber (iOS) em cada build de produção.
Checklist de Deploy
-
app.jsoncom versão, bundle identifier e nome corretos - Ícone e splash screen em alta resolução
- Keystore Android salvo e documentado
- Certificados iOS válidos e provisioning profile correto
- Variáveis de ambiente de produção configuradas no EAS
- Testes automatizados passando
- Screenshots para as stores preparadas
- Privacy policy URL configurada (obrigatório nas stores)
Conclusão
EAS eliminou a maior barreira do desenvolvimento mobile: o processo de build e deploy. Com eas build e eas submit, qualquer desenvolvedor — mesmo sem Mac — consegue publicar um app iOS e Android. Configure o CI/CD uma vez e automatize completamente o processo de release.