Melhores Práticas da Plataforma iOS
Um resumo condensado de 25 itens essenciais do iOS para equipes do Expo SDK 57 - decisões de paridade quando o Android pode fazer mais barato, extraído de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado de 25 itens essenciais do iOS para equipes do Expo SDK 57 - decisões de paridade quando o Android pode fazer mais barato, extraído de todas as páginas desta seção.
Abra .xcworkspace, não .xcodeproj: Projetos CocoaPods falham misteriosamente quando o workspace é ignorado - open ios/*.xcworkspace é a única entrada correta no Xcode quando Pods/ existe.
Builds diários via CLI: Prefira npx expo run:ios em vez de viver no Xcode - o IDE nativo é para mistérios de assinatura, Instruments e erros de compilação de pod, não para iteração de JS.
Simulador para velocidade, dispositivo para verdade: Push, universal links, Live Activities, BGTaskScheduler, câmera e biometria exigem hardware físico - simuladores dão falsa confiança.
Gitignore ios/ sob CNG: Commite app.config.ts e plugins; gere nativo novamente no EAS ou npx expo prebuild - pbxproj editado manualmente se desvia a cada atualização de SDK.
Commite Podfile.lock quando ios/ estiver no git: Equipes sem CNG precisam de pods determinísticos em CI - pod install e não pod update em branches de release.
Use npx pod-install da raiz do repositório: Evita Pods/ no diretório errado e corresponde à invocação esperada do CocoaPods pelo Expo em Macs M-series e Intel.
Prefira simuladores arm64 em Apple Silicon: Simuladores Rosetta x86_64 são mais lentos e causam erros de linker de incompatibilidade de arquitetura com pods modernos do RN 0.86.
Entitlements são enviados no IPA, não via OTA: Push, domínios associados, app groups e modos de background precisam de eas build após alterações em app.config.ts - EAS Update não pode adicionar capacidades.
Declare associatedDomains com o prefixo applinks:: Universal links falham silenciosamente no Safari quando o prefixo está incorreto - combine com AASA hospedado e reconstrua; veja iOS Universal Links.
Combine o portal Apple Developer e a configuração: Capacidades do App ID, identificador do bundle, AASA appID e credenciais EAS devem ser strings idênticas - erros de digitação abrem o Safari em vez do seu app.
Push de produção usa APNs de produção: Builds do TestFlight e da App Store usam aps-environment: production - tokens de sandbox nunca entregam para usuários do TestFlight.
Declare apenas UIBackgroundModes que você implementa: Entradas especulativas de audio, location ou fetch acionam a Diretriz 2.5.4 - remova modos copiados e colados do infoPlist.
Execute npx expo-doctor antes de cada release iOS: Detecta desvios de versão, configuração inválida e erros de dependência antes que queimem um ciclo de TestFlight.
Agregue privacy manifests antes do upload: Mescle NSPrivacyAccessedAPITypes do Expo SDK e arquivos PrivacyInfo.xcprivacy de terceiros - ITMS-91053 bloqueia o processamento em minutos.
Alinhe Privacy Nutrition Labels com os SDKs em tempo de execução: Relatórios de crash, analytics e SDKs de autenticação coletam dados - os rótulos devem corresponder aos manifests e à Diretriz 5.1.1 ou a revisão humana rejeita.
Ofereça Sign in with Apple ao oferecer criação de conta Google/Facebook: A Diretriz 4.8 é aplicada - expo-apple-authentication é mais barato do que loops de reenviar.
Envie exclusão de conta no aplicativo: Se os usuários podem se registrar no aplicativo, Configurações → Excluir Conta deve chamar seu backend - links de exclusão apenas para web falham na revisão em 2026.
Teste builds de Release antes de eas submit: O Metro Debug esconde módulos nativos ausentes, embed de env incorreto e crashes de produção apenas do Hermes - teste exaustivamente perfis production ou preview.
Use TestFlight interno para engenharia, externo para UAT: Interno pula a Revisão Beta de App (100 usuários Connect); externo escala para 10.000 com um gate mais leve da Apple - ambos expiram em 90 dias.
Planeje a cadência de reconstrução do TestFlight: Betas longas precisam de eas build agendado antes da expiração - automatize lembretes da API Connect com 14 dias restantes.
Preencha as Informações de Revisão de App com credenciais de demonstração funcionais: Não conseguir fazer login para os revisores é uma rejeição 2.1 instantânea - rotacione senhas e documente caminhos de convidado nas notas.
Widgets e Live Activities são alvos separados: expo-widgets usa SwiftUI - não views RN; requer app groups, dev client e utilidade significativa para passar 4.2 - não Expo Go.
Não adote padrões Android no iOS por imitação: Carregamento lateral de APKs, serviços de background arbitrários e deep links baseados em intents não têm equivalente no iOS - invista em entitlements, AASA e TestFlight em vez disso.
Verifique entitlements no IPA construído antes de culpar o JS: codesign -d --entitlements :- no .app arquivado resolve disputas de domínio associado mais rápido do que adivinhar a configuração do Router.
Documente o escopo exclusivo do iOS em ADRs de paridade: Quando o Android lança widgets ou backgrounds flexíveis primeiro, registre o cronograma do iOS, o risco de revisão e o impacto no usuário - stakeholders não devem assumir simetria de recursos sem custo nativo.
eas build --local local reproduz a nuvem quando necessário.expo install --fix + prebuild.ios/ apenas quando brownfield mescla ou políticas corporativas exigem - veja Noções Básicas de Prebuild.ios/ está ausente), pod install, compilação e assinatura - seu app.config.ts ainda é a fonte de entitlements e manifests.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