Essenciais do Xcode sem se tornar um engenheiro iOS em tempo integral - o modelo mental mínimo que os desenvolvedores React Native precisam quando npx expo run:ios, EAS Build ou um crash log nativo o puxam para a cadeia de ferramentas da Apple no SDK 57.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Gera ios/ a partir de app.config.ts (CNG) e executa no simuladornpx expo prebuild --platform iosnpx expo run:ios# Escolhe um simulador específiconpx expo run:ios --simulator "iPhone 16 Pro"# Dispositivo USB (requer conta Apple Developer + Xcode)npx expo run:ios --device# Abre o workspace quando você precisar inspecionar as configurações de build nativasopen ios/*.xcworkspace# Lista simuladores e dispositivos conectadosxcrun simctl list devices availablexcrun xctrace list devices
Quando usar isso:
Primeira vez abrindo ios/ após npx expo prebuild.
Um build nativo falha no EAS e você precisa reproduzi-lo localmente no Xcode.
QA relata um bug exclusivo de dispositivo (push, câmera, biometria, links universais).
Você precisa ler um crash log ou anexar o depurador nativo a um problema do Hermes.
Alguém na equipe pergunta "qual arquivo devo editar?" - resposta: geralmente app.config.ts, não pbxproj.
ios/├── Podfile ← Manifesto de dependência do CocoaPods (autolinking escreve aqui)├── Podfile.lock ← Versões de pod fixadas (commite se ios/ estiver no git)├── YourApp.xcworkspace ← ABRA ISTO no Xcode (inclui o projeto Pods)├── YourApp.xcodeproj ← Apenas o target do app - entrada incorreta quando os Pods existem└── YourApp/ ├── AppDelegate.swift ← Ponto de entrada do RN; raramente edite manualmente sob CNG ├── Info.plist ← Strings de permissão; prefira plugins de app.config └── YourApp.entitlements ← Push, domínios associados, grupos de apps
Etapa 2 - Execute a partir da CLI (caminho diário)
# Inicia um simulador sem executar o appxcrun simctl boot "iPhone 16 Pro"# Abre uma URL (teste rápido de link universal)xcrun simctl openurl booted "https://shop.example.com/orders/42"# Apaga o estado (chaveiro travado / AASA em cache)xcrun simctl erase booted
Macs com Apple Silicon executam simuladores arm64 nativamente - prefira-os sobre simuladores Rosetta-x86_64.
Simuladores não podem receber push APNs real, não executam BGTaskScheduler fielmente e simulam alguns sensores.
Dispositivos físicos iOS 16+ exigem Modo de Desenvolvedor (Ajustes → Privacidade e Segurança).
Abrir .xcodeproj em vez de .xcworkspace - Headers do Pods ausentes, build falha. Correção: sempre open ios/*.xcworkspace.
Editar Info.plist / entitlements manualmente sob CNG - apagados no próximo prebuild. Correção: plugin de configuração ou campos ios de app.config.ts.
Assumir que o simulador prova push ou Live Activities - APNs requer dispositivo + entitlements adequados. Correção: teste em dispositivo USB.
Discrepância de Bundle ID - app.config.ts, portal Apple Developer e appID do AASA devem corresponder exatamente.
Perseguir a UI do Xcode em cada upgrade do RN - se ios/ for gerado, exclua e prebuild --clean antes de merges manuais profundos.
Usar Expo Go para recursos de entitlements do iOS - links universais, Sign in with Apple e grupos de apps precisam do seu bundle ID em um cliente de desenvolvimento ou build de loja.