Higiene do Podfile.lock e peculiaridades do simulador Apple Silicon - o cookbook do CocoaPods que os desenvolvedores React Native precisam quando npx expo run:ios falha em Pods/, o EAS Build relata um erro de resolução de pod, ou um Mac com processador M seleciona a arquitetura incorreta do simulador.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Ponto de entrada preferido da raiz do projeto (Expo envolve CocoaPods)npx pod-install# Equivalente quando já está em ios/cd ios && pod install && cd ..# Regeneração nativa completa (CNG) e depois podsnpx expo prebuild --platform iosnpx pod-install# Reset nuclear quando os pods estiverem corrompidos após um bump de SDKrm -rf ios/Pods ios/Podfile.lock ios/buildnpx expo prebuild --platform iosnpx pod-installnpx expo run:ios
Quando usar isto:
The sandbox is not in sync with the Podfile.lock após um git pull.
Adicionando ou removendo um módulo nativo (expo-camera, react-native-maps, etc.).
Atualizando Expo SDK ou React Native - as versões dos pods mudam.
A compilação do simulador falha com erros de arquitetura no Apple Silicon.
O EAS Build passa localmente mas falha - desvio do lockfile entre colegas de equipe.
# ios/Podfile (excerto - não mantenha manualmente o bloco de autolinking)require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")target 'ShopApp' do use_expo_modules! config = use_native_modules! use_react_native!(:path => config[:reactNativePath], :hermes_enabled => true)end
Módulos nativos do package.json aparecem via autolinking - não linhas manuais de pod 'SomeLibrary' a menos que a documentação de uma biblioteca exija explicitamente.
Passo 2 - Adicione uma dependência nativa da maneira correta
npx expo install expo-cameranpx expo prebuild --platform ios # aplica o plugin + entradas do Podfilenpx pod-installnpx expo run:ios
Passo 3 - Higiene do Podfile.lock
ios/ no git?
Política do Podfile.lock
Sim (nativo bruto / commitado)
CommitPodfile.lock - CI e EAS devem resolver versões de pod idênticas
Não (CNG / gitignored)
O lockfile é efêmero - EAS o regenera a cada build; ainda assim, comite package-lock.json
# Após atualizações intencionais de pods em ios/ commitadogit add ios/Podfile.lockgit commit -m "chore(ios): fixa pods após adicionar expo-camera"
Passo 4 - Seleção do simulador Apple Silicon
# Lista os runtimes - prefira simuladores arm64 (Apple Silicon)xcrun simctl list devices available | grep -E "iPhone|Booted"# Execute em um simulador arm64 nomeadonpx expo run:ios --simulator "iPhone 16 Pro"
No Xcode → Product → Destination: evite simuladores marcados como Rosetta, a menos que um pod legado force x86_64 (raro no SDK 57).
Passo 5 - Corrija "building for iOS Simulator, but linking in object file built for iOS"
# 1. Garanta que não há caches de arquitetura mistarm -rf ~/Library/Developer/Xcode/DerivedDatarm -rf ios/Pods ios/build# 2. Reinstale os podsnpx pod-install# 3. Recompilenpx expo run:ios --simulator "iPhone 16 Pro"
Se um pod de terceiros distribuir apenas binários pré-compilados x86_64, as opções são: atualizar o pod, escolher uma versão compatível com arm64, ou usar temporariamente um simulador Rosetta como ponte - não é uma solução de longo prazo.
O que isto demonstra:
npx pod-install é o ponto de entrada multiplataforma que o Expo documenta.
Disciplina de Lockfile previne falhas do EAS do tipo "funciona na minha máquina".
Alinhamento de arquitetura entre o runtime do simulador e os pods compilados.
Autolinking substitui edições manuais do Podfile para módulos do ecossistema.
Dependências do package.json
↓
expo-modules-autolinking + autolinking do RN
↓
ios/Podfile (gerado)
↓
pod install → Pods/ + Podfile.lock
↓
YourApp.xcworkspace
Plugins de configuração podem injetar subspecs de pod ou use_frameworks! - veja Config Plugins. Se um plugin e uma edição manual do Podfile entrarem em conflito, o plugin vence na próxima prebuild.
[!] CDN: trunk URL couldn't be downloaded: https://cdn.cocoapods.org/...
# Tente novamente com atualização do repositóriocd ios && pod install --repo-update && cd ..# Proxy corporativo persistente: defina HTTP_PROXY / HTTPS_PROXY para o shell que executa pod install
React Native 0.86 habilita a Nova Arquitetura por padrão. Os pods compilam cientes de Fabric/TurboModule. Se uma biblioteca legada não for compatível, expo-doctor e erros de compilação aparecerão cedo - corrija atualizando ou substituindo a biblioteca, não desabilitando a Nova Arquitetura em produção sem um ADR.
Linhas manuais de pod 'ExpoModulesCore' - duplicadas com autolinking, erros de símbolo duplicado. Correção: remova edições manuais; npx expo prebuild --clean.
Commit do diretório Pods/ - repositório inchado, inferno de merge. Correção: comite apenas Podfile.lock; ignore Pods/ no .gitignore (padrão Expo).
Lockfile desatualizado após troca de branch - erros de sincronização do sandbox. Correção:npx pod-install ou delete Pods/ e reinstale.
Executar pod do diretório errado - cria Pods/ solto na raiz do repositório. Correção: execute apenas dentro de ios/ ou use npx pod-install da raiz.
Simulador x86_64 em Mac arm64 para desenvolvimento diário - lento e erros de incompatibilidade de arquitetura. Correção: use runtimes de simulador arm64 do Xcode → Settings → Platforms.
Versões diferentes do CocoaPods entre colegas de equipe - churn de lockfile. Correção: documente a versão do CocoaPods no README; EAS ignora desvios locais com prebuild limpo.