Razões comuns de rejeição para aplicativos Expo em 2026 - um guia para passar nas verificações automatizadas de upload e na Revisão Humana da App Store ao publicar binários React Native construídos com EAS, não Expo Go.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Gate pré-submissão (execute em cada branch de release)npx expo-doctornpm audit --audit-level=higheas build --profile production --platform ios# Instale o build equivalente à Produção no dispositivo antes de enviareas build --profile preview --platform ios # distribuição interna# Dogfood: inicialização fria, login, paywall, toque de push, link universal, logout + exclusão de conta# Envie com metadados do repositório (não da memória)eas submit --platform ios --latest# Sanidade do manifesto de privacidade - após prebuildplutil -p ios/ShopApp/PrivacyInfo.xcprivacy 2>/dev/null || \ grep -r NSPrivacyAccessedAPIType ios/
// app.config.ts - preventivos de rejeição agrupadosexport default { expo: { ios: { bundleIdentifier: "com.example.shopapp", privacyManifests: { NSPrivacyAccessedAPITypes: [ { NSPrivacyAccessedAPIType: "NSPrivacyAccessedAPICategoryUserDefaults", NSPrivacyAccessedAPITypeReasons: ["CA92.1"], }, ], }, infoPlist: { NSCameraUsageDescription: "ShopApp usa a câmera para escanear códigos de barras de produtos.", NSPhotoLibraryUsageDescription: "ShopApp permite que você escolha fotos para seu perfil.", }, }, plugins: ["expo-apple-authentication", "expo-notifications"], },};
Quando usar isto:
Primeira submissão à App Store para um aplicativo Expo.
Respondendo a um e-mail de rejeição com um número de Guideline (4.2, 5.1.1, 2.1, etc.).
Upload automatizado falha com ITMS-91053 ou falta de conformidade.
O produto pergunta "podemos lançar este wrapper WebView / clone de chat de IA?"
Você precisa de uma checklist antes de eas submit.
Sintoma: "O aplicativo oferece login do Google, mas não Sign in with Apple."
Correção: Adicione expo-apple-authentication ao oferecer criação de conta Google/Facebook/email-senha. Aplicativos apenas de login sem autenticação de terceiros podem ser isentos - documente nas notas de Revisão.
Sintoma: "Os usuários podem criar contas, mas não podem excluí-las no aplicativo."
Correção: Configurações → Excluir Conta → confirmar → chamar API de exclusão do backend. Um link para exclusão na web não é suficiente se o aplicativo suportar registro no aplicativo.
// Padrão de tela de Configurações - deve realmente excluir a conta no servidorasync function deleteAccount() { await api.delete("/me"); await signOut(); router.replace("/welcome");}
Preencha todos os campos no App Store Connect antes de enviar:
Login necessário: SimNome de usuário: review@example.comSenha: <senha de demonstração rotativa>Notas: Toque em "Navegar como convidado" no login para pular a autenticação. Notificações push requeremdispositivo físico - links universais testados em https://shop.example.com/orders/demo.Exclusão de conta: Configurações → Conta → Excluir Conta.
Rotacione senhas de demonstração após cada ciclo de revisão.
Se o backend for geo-fencado, forneça um endpoint acessível nos EUA para os revisores da Apple.
Aplicativos para crianças: sem análises de terceiros ou anúncios sem conformidade rigorosa - a maioria dos SDKs de análise do Expo desqualifica a Categoria Infantil.
Rastreamento (IDFA): expo-tracking-transparency + NSUserTrackingUsageDescription antes que qualquer SDK de rastreamento seja inicializado.
Enviar um cliente de desenvolvimento por engano - ícones errados, expo-dev-menu visível. Correção: perfil production sem developmentClient: true.
Capturas de tela da classe de dispositivo errada - capturas de tela do iPad são necessárias se supportsTablet: true. Correção: capturas de tela do iPad de 13" ou desative o suporte a tablet intencionalmente.
OTA quebrou a Produção após a revisão - raro, mas possível se o OTA enviar JS quebrado após a aprovação. Correção: rollback de canal; lançamento faseado.
Link universal abre o Safari na revisão - falha do AASA. Correção: cabeçalhos CDN, appID correto - não "funciona apenas no simulador".
Strings de permissão de placeholder - "Permitir que $(PRODUCT_NAME) acesse a câmera" deixado como TODO. Correção: cópia legível específica do produto.
Ocultar recursos atrás de geo/IP - A Revisão testa a partir dos EUA. Correção: flags de recursos ativadas para builds de revisão ou acesso global.