Saltar para o conteúdo
Deploy de Apps React Native: EAS Build e Submit na Prática
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 Expo

eas.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 --local

Preview (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 all

Produção

# Build assinado pronto para as stores
eas build --profile production --platform all

# Acompanhar progresso
eas build:list

Certificados 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 automaticamente

Guarde 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_ID

Apple App Store

eas submit --platform ios --profile production

CI/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.json com 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.