Distribuição via TestFlight
Testadores internos/externos e gerenciamento de expiração de builds - o guia do TestFlight para enviar IPAs do Expo SDK 57 para QA, stakeholders e usuários beta antes do lançamento na App Store.
Busque em todas as páginas da documentação
Testadores internos/externos e gerenciamento de expiração de builds - o guia do TestFlight para enviar IPAs do Expo SDK 57 para QA, stakeholders e usuários beta antes do lançamento na App Store.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Construir IPA com formato de produção para TestFlight
eas build --profile production --platform ios
# Enviar para o App Store Connect (aba TestFlight)
eas submit --platform ios --latest
# Ou construir + enviar em um único fluxo (eas.json)
eas build --profile production --platform ios --auto-submit// eas.json - perfil de produção para TestFlight
{
"build": {
"production": {
"distribution": "store",
"ios": {
"simulator": false
}
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": false
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "you@example.com",
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345"
}
}
}
}Quando usar isso:
eas submit para o App Review.Passo 1 - Configurar credenciais EAS
eas credentials --platform ios
# Certificado de distribuição + perfil de provisionamento da App Store para o ID do pacoteCertifique-se de que o App Store Connect tenha um registro de aplicativo que corresponda a ios.bundleIdentifier.
Passo 2 - Construir e enviar
eas build --profile production --platform ios
eas submit --platform ios --latestApp Store Connect → aba TestFlight → o build mostra Processando (5–30 minutos) e depois Pronto para Testar.
Passo 3 - Teste interno (caminho rápido)
| Propriedade | Testadores internos |
|---|---|
| Quem | Usuários do App Store Connect com função de Administrador/Desenvolvedor/Marketing/Suporte ao Cliente |
| Limite | 100 usuários |
| Beta App Review | Não necessário |
| Expiração | 90 dias a partir do upload |
| Uso para | Engenharia, PM, design - QA diário |
Passo 4 - Teste externo (beta mais amplo)
| Propriedade | Testadores externos |
|---|---|
| Quem | Convites por e-mail ou link público |
| Limite | 10.000 testadores |
| Beta App Review | Necessário por build (primeiro externo) |
| O que a Apple verifica | Travamentos, conteúdo de placeholder, violações óbvias de diretrizes |
| Uso para | Programa beta, clientes amigáveis, UAT |
Beta Pública).Passo 5 - Lidar com a expiração de 90 dias
Build do TestFlight expira: 2026-04-08
Hoje: 2026-04-01
Ação: agendar eas build esta semana; notificar testadores antes da expiração# Reconstruir a mesma tag git ou branch de lançamento
eas build --profile production --platform ios
eas submit --platform ios --latest
# Grupos externos: novo build pode precisar de Beta App Review se houver alterações materiaisAutomatizar lembretes:
# .github/workflows/testflight-expiry-reminder.yml (conceitual)
# Analisar a API do Connect para o build com expiração mais próxima; enviar para o Slack quando faltarem < 14 diasO que isso demonstra:
| Canal | Perfil | Método de instalação | Expira |
|---|---|---|---|
| TestFlight interno | production / store | Aplicativo TestFlight | 90 dias |
| TestFlight externo | production / store | Aplicativo TestFlight | 90 dias |
| Ad hoc | preview / internal | IPA direto / QR (EAS) | Certificado de 1 ano |
| Desenvolvimento | development | Cliente USB / dev | Certificado de 7 dias (dev) |
| App Store | production | Loja pública | Até ser substituído |
Para universal links e push, prefira TestFlight (aps-environment de produção) em vez de clientes de desenvolvimento ao validar o comportamento de produção.
Upload recebido → Processando → Pronto para Testar → (Externo) Aguardando Revisão → Testando
↓ falha
Binário Inválido / Conformidade AusenteConformidade Ausente: Responda às perguntas de criptografia no Connect - o mesmo que para a App Store.
Binário Inválido: Frequentemente o manifesto de privacidade (ITMS-91053) - corrija antes que os testadores vejam algo.
Logs de travamento e capturas de tela fluem de volta para o Connect → TestFlight → build → Travamentos.
Build 1.4.0 (42) - Beta de Março de 2026
Foco:
- Universal link: https://shop.example.com/orders/demo abre a tela de Pedido
- Push: habilite notificações ao fazer login; tocar na notificação direciona para a caixa de entrada
- Exclusão de conta: Configurações → Excluir Conta
Problemas conhecidos:
- Pequeno corte no layout do iPad no carrinho - correção agendada para 1.4.1
Credenciais: review@example.com / BetaDemo2026!# Envio de CI não interativo
EXPO_TOKEN=xxx eas build --profile production --platform ios --non-interactive
EXPO_TOKEN=xxx eas submit --platform ios --latest --non-interactiveBloqueie o envio com base no expo-doctor, testes e tempo de imersão interna no TestFlight antes do beta externo.
"ios": { "simulator": true }.app para Simulador - não pode ser enviado para o TestFlight.simulator: false).developmentClient: true para TestFlight - tipo de binário incorreto para distribuição na loja. Correção: perfil de produção sem a flag de cliente de desenvolvimento para a trilha do TestFlight.aps-environment correto.ascAppId no perfil de envio do eas.json.appID incompatível com o ID do pacote de produção. Correção: Universal Links do iOS.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Distribuição interna EAS (ad hoc) | Instalação rápida via QR, sem TestFlight | Precisa de mais de 500 testadores ou análise de travamentos no Connect |
| Upload do Organizador Xcode | Tarefa manual única sem EAS | Equipe já padronizada em eas submit |
| Firebase App Distribution | QA informal multiplataforma Android+iOS | Você quer gerenciamento de testadores nativo da Apple |
| Lançamento faseado da App Store | Rollout gradual pós-aprovação | Validação pré-lançamento |
production; o App Review é um portão separado após a validação do TestFlight.eas submit de CI em vez de senha do Apple ID + 2FA.Versões da Stack: Esta página foi escrita para React 19.2.3, React Native 0.86.0 e Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026