Simuladores são rápidos; dispositivos físicos são verdadeiros. A depuração USB e sem fio conecta seu aplicativo SDK 57 a hardware real, e a distribuição interna envia builds instaláveis para QA sem revisão da App Store - o ciclo que toda equipe móvel precisa antes da produção.
Cartão de referência rápida - pronto para copiar e colar.
# Android USB - verify the device is visibleadb devices# Expect: <serial> device# Run a development build directly on the plugged-in phonenpx expo install expo-dev-clientnpx expo run:android --device# iOS USB - pick the connected iPhone in Xcode or:npx expo run:ios --device# Start Metro for an installed dev client (same Wi‑Fi or USB)npx expo start --dev-client --lan# Android wireless (Android 11+) after initial USB pairingadb pair <ip>:<pairing-port> # one-time, from Developer optionsadb connect <ip>:5555adb devices# Internal QA build (installable .ipa / .apk)eas build --profile preview --platform all
Quando usar isto:
Validar câmera, biometria, notificações push ou haptics que simuladores fingem ou pulam.
Medir o desempenho de rolagem e o uso de memória em SoCs reais.
QA precisa de um build instalável sem lançamento público na loja.
Depurar problemas de LAN - USB (--localhost / adb reverse) contorna Wi‑Fi instável.
Testar um candidato a lançamento nos telefones dos colegas de equipe via TestFlight ou teste interno do Play.
# After eas.json exists:eas logineas build:configure # if not already done# Daily dev on your phoneeas build --profile development --platform android# Install from the QR/link, then:npx expo start --dev-client# Hand to QA - internal distribution (no store review)eas build --profile preview --platform ioseas build --profile preview --platform android# iOS → TestFlight internal group; Android → direct APK or Play internal track
// App.tsx - show connection mode so QA can report environment accuratelyimport { useEffect, useState } from "react";import { StyleSheet, Text, View } from "react-native";import * as Device from "expo-device";import Constants from "expo-constants";export default function App() { const [info, setInfo] = useState("Loading…"); useEffect(() => { const model = Device.modelName ?? "unknown"; const os = `${Device.osName} ${Device.osVersion}`; const build = Constants.expoConfig?.version ?? "0.0.0"; const channel = Constants.expoConfig?.extra?.eas?.channel ?? "local"; setInfo(`${model} · ${os} · v${build} · channel:${channel}`); }, []); return ( <View style={styles.container}> <Text style={styles.title}>QA device probe</Text> <Text style={styles.body}>{info}</Text> <Text style={styles.hint}>Shake device → dev menu → Reload after Metro reconnects.</Text> </View> );}const styles = StyleSheet.create({ container: { flex: 1, justifyContent: "center", alignItems: "center", padding: 24 }, title: { fontSize: 20, fontWeight: "700", marginBottom: 8 }, body: { fontSize: 14, textAlign: "center", color: "#334155" }, hint: { marginTop: 16, fontSize: 12, color: "#64748b" },});
O que isso demonstra:
adb devices como o portão antes das implantações USB do Android.
npx expo run:android --device / npx expo run:ios --device para compilações nativas locais em hardware.
Perfis eas.json separando desenvolvimento (cliente de desenvolvimento + depuração) de prévia (QA interno).
Metadados expo-device na tela para que relatórios de bugs incluam modelo e sistema operacional.
Depuração USB expõe o dispositivo ao adb (Android) ou devicectl/ios-deploy do Xcode (iOS). O Expo CLI e npx expo run:* encaminham o bundle do Metro pela conexão.
npx expo start --dev-client serve JavaScript para um build de desenvolvimento instalado - o shell nativo permanece no telefone; o JS recarrega rapidamente via LAN, túnel ou encaminhamento de porta USB.
Depuração sem fio mantém o mesmo URL do Metro após o emparelhamento inicial - o Android usa adb pair + adb connect; o iOS usa a janela Window > Devices and Simulators do Xcode para emparelhamento sem fio (fluxo de trabalho do iOS 17+ no Xcode 15+).
Distribuição interna (distribution: "internal" em eas.json) produz IPAs iOS ad-hoc (dispositivos registrados) ou APKs Android / uploads da trilha interna do Play - não listagens públicas na loja.
Builds do canal de prévia combinam bem com o EAS Update para que o QA possa receber bundles JS OTA após a instalação do shell nativo.
Configurações > Privacidade e Segurança > Modo Desenvolvedor (iOS 16+) - reinicialização necessária
Registrar dispositivo
Xcode Janela > Dispositivos e Simuladores - provisionamento de equipe
Executar app
npx expo run:ios --device ou selecionar o dispositivo no Xcode
IDs Apple gratuitos podem implantar em seu próprio dispositivo para testes limitados; a distribuição em equipe requer uma assinatura do Apple Developer Program.
Depuração sem fio → Emparelhar dispositivo com código de emparelhamento → adb pair ip:porta
adb connect ip:5555
iOS
Conectar via USB → Xcode Dispositivos → marcar Conectar via rede
Mesma rede Mac; dispositivo aparece sem fio no Xcode
Após adb connect sem fio, execute npx expo start --dev-client --lan e certifique-se de que o telefone e o laptop compartilham uma sub-rede (Wi‑Fi de convidado geralmente bloqueia tráfego entre pares).
adb devices mostra unauthorized - O prompt RSA foi dispensado. Correção: Revogue as autorizações de depuração USB no telefone, reconecte o USB, aceite o prompt.
Build iOS falha com erros de provisionamento - UDID do dispositivo não está no perfil. Correção: Execute eas device:create e reconstrua, ou registre o dispositivo no portal Apple Developer.
Metro inacessível na LAN - Redes de convidados bloqueiam o tráfego do dispositivo para o laptop. Correção: Use adb reverse + --localhost no Android, ou --tunnel em ambas as plataformas.
Expo Go no dispositivo não corresponde ao SDK 57 - O Expo Go da App Store pode estar atrasado em relação ao SDK do seu projeto. Correção: Use um build de desenvolvimento; o Expo Go não pode carregar módulos nativos arbitrários de qualquer maneira.
adb sem fio cai silenciosamente - O telefone dormiu ou mudou de IP. Correção: execute adb connect novamente; mantenha a depuração sem fio das opções do desenvolvedor habilitada.
Build iOS interno não instala - Dispositivo do testador não registrado. Correção: Colete os UDIDs através do link eas device:create antes dos builds preview.
QA testa o desempenho de depuração - Builds de depuração incluem sobrecarga de ferramentas de desenvolvimento. Correção: Envie builds preview ou de lançamento para aprovação de desempenho.
Como verifico se meu telefone Android está conectado?
adb devices
Você deve ver seu número de série com o estado device. Se disser unauthorized, aceite o prompt de depuração no telefone.
Como executo meu aplicativo Expo em um iPhone físico?
Instale o Xcode, habilite o Modo Desenvolvedor no telefone, confie no Mac e execute npx expo run:ios --device ou selecione o dispositivo no Xcode. Para builds na nuvem, use eas build --profile development --platform ios e instale a partir do link.
Qual é a diferença entre expo start e expo start --dev-client?
--dev-client visa seu build de desenvolvimento personalizado em vez do Expo Go. Necessário assim que expo-dev-client e módulos nativos personalizados estiverem no projeto.
Como funciona a depuração sem fio no Android?
Em Opções do desenvolvedor > Depuração sem fio, emparelhe com adb pair <ip>:<porta> usando o código de seis dígitos, depois adb connect <ip>:5555. O dispositivo deve aparecer em adb devices sem USB.
Como habilito a depuração sem fio no iOS?
Conecte via USB, abra o Xcode Janela > Dispositivos e Simuladores, selecione seu iPhone e marque Conectar via rede. Após o emparelhamento, o Xcode e npx expo run:ios --device podem direcionar o dispositivo sem fio.
O que é distribuição interna no EAS?
"distribution": "internal" em eas.json produz builds para testadores registrados - IPAs iOS ad-hoc, APKs Android ou trilha interna do Play - sem lançamento público na loja.
Quando devo usar o perfil preview em vez de development?
development - engenheiros com menus de desenvolvimento e iteração rápida. preview - builds de QA mais próximos da produção, instaláveis via TestFlight interno ou link APK.
O Metro não consegue se conectar via Wi‑Fi - e agora?
Tente npx expo start --dev-client --tunnel, ou no Android execute adb reverse tcp:8081 tcp:8081 e inicie com --localhost.
Preciso do expo-dev-client para testes em dispositivos físicos?
Somente se você usar módulos nativos além do bundle do Expo Go. Para picos apenas com SDK, escaneie o QR com o Expo Go. A maioria dos aplicativos de produção rapidamente supera o Expo Go.
Como registro dispositivos iOS para builds internos?
eas device:create
Compartilhe o URL de registro com os testadores antes de executar eas build --profile preview --platform ios.
Posso instalar um build preview do Android sem o Google Play?
Sim - defina "buildType": "apk" no perfil Android. O EAS fornece um link de download direto que você pode compartilhar no Slack ou por e-mail.
Por que meu dispositivo físico é mais lento que o simulador?
Builds de depuração incluem ferramentas de desenvolvimento, sobrecarga de rede do Metro e limitação térmica real. Use builds de lançamento ou prévia para desempenho representativo.
Quais recursos de hardware devem ser testados em um dispositivo real?
Câmera, notificações push, biometria, haptics, GPS preciso, barômetro e tarefas em segundo plano. Simuladores omitem ou fingem esses.
Como compartilho um build com QA não desenvolvedor?
Execute eas build --profile preview, distribua o link de instalação ou o convite do TestFlight, e documente o canal do Metro se você também enviar bundles do EAS Update.