Como depurar apps React Native em dispositivos físicos Android e iOS
Depurar aplicativos React Native em dispositivos físicos é uma etapa essencial no desenvolvimento mobile. Diferente do simulador, o hardware real expõe problemas de performance, conectividade e funcionalidades nativas que não aparecem em ambientes controlados. Este artigo aborda as principais técnicas e ferramentas para depuração em dispositivos Android e iOS, seguindo o contexto da série Temas — Lista Final (1200 temas).
1. Preparação do ambiente de depuração
Antes de conectar o dispositivo, é necessário configurar os modos de desenvolvimento.
Android:
- Acesse "Configurações" > "Sobre o telefone" e toque 7 vezes em "Número da build" para ativar as "Opções do desenvolvedor".
- Em "Opções do desenvolvedor", ative "Depuração USB".
- Conecte o dispositivo via cabo USB e autorize a depuração quando solicitado.
iOS:
- Conecte o iPhone ao Mac e abra o Xcode.
- Vá em "Window" > "Devices and Simulators", selecione o dispositivo e ative "Enable Developer Mode".
- No dispositivo, vá em "Ajustes" > "Geral" > "VPN & Gerenciamento de Dispositivo" e confie no certificado do desenvolvedor.
Verifique os drivers USB no Windows ou Linux para Android. No macOS, o iOS reconhece automaticamente via cabo.
2. Conexão do dispositivo físico ao metro bundler
O Metro bundler é o servidor de desenvolvimento do React Native.
Execute no terminal:
npx react-native start
Android:
- Conecte o dispositivo via USB.
- Execute:
text
adb reverse tcp:8081 tcp:8081
- No dispositivo, abra o app e escaneie o QR Code exibido no terminal (se estiver usando Expo) ou pressione "Reload" no menu de desenvolvedor.
iOS:
- Certifique-se de que o dispositivo e o Mac estão na mesma rede Wi-Fi.
- No Safari do Mac, acesse http://<IP_DO_MAC>:8081/index.bundle?platform=ios para verificar a conexão.
- No app, configure o IP manualmente no menu de desenvolvedor.
Verifique os logs no terminal para confirmar a conexão:
[React Native] Running application "MyApp" with appParams: {"rootTag":1}
3. Uso do React Native DevTools (Flipper)
O Flipper é a ferramenta oficial de depuração do React Native.
Instalação:
- Baixe o Flipper em fbflipper.com e instale.
- No projeto, adicione as dependências:
text
npm install --save-dev react-native-flipper
- Para iOS, execute pod install no diretório ios.
Conexão:
- Abra o Flipper e selecione o dispositivo conectado.
- As abas principais incluem:
- Logs: Visualiza console.log e erros.
- Network: Inspeciona requisições HTTP.
- Layout Inspector: Examina a árvore de componentes.
- React DevTools: Depura estado e props de componentes.
Exemplo de depuração de rede no Flipper:
// No código
fetch('https://api.exemplo.com/dados')
.then(response => response.json())
.then(data => console.log('Dados recebidos:', data));
No Flipper, a requisição aparece com status, headers e corpo da resposta.
4. Depuração via Chrome DevTools (Android)
O Chrome DevTools permite depuração remota apenas no Android.
Ativação:
- Agite o dispositivo ou execute:
text
adb shell input keyevent 82
- Selecione "Debug JS Remotely" no menu de desenvolvedor.
- O Chrome abre automaticamente em http://localhost:8081/debugger-ui.
Uso:
- Abra o DevTools (F12) e vá para a aba "Sources".
- Adicione breakpoints no código-fonte:
text
function calcularTotal(itens) {
debugger; // Pausa aqui
return itens.reduce((acc, item) => acc + item.preco, 0);
}
- Inspecione variáveis no console e no painel "Scope".
Limitações: Não funciona no iOS nativamente. Para iOS, use Safari Web Inspector.
5. Depuração nativa no iOS com Safari Web Inspector
O Safari oferece depuração direta em dispositivos iOS.
Configuração:
- No Mac, vá em Safari > "Preferências" > "Avançado" e marque "Mostrar menu Desenvolver".
- Conecte o iPhone via cabo USB.
- No menu "Desenvolver" do Safari, selecione o dispositivo e o nome do app.
Recursos:
- Console: Visualiza logs e erros JS.
- Elements: Inspeciona o DOM renderizado.
- Network: Monitora requisições de rede.
Exemplo de inspeção de elemento:
// No console do Safari
document.querySelector('.botao-principal').style.backgroundColor = 'red';
Isso altera a cor do botão em tempo real no dispositivo.
Diferença: A depuração nativa é mais rápida e acessa APIs nativas diretamente, ao contrário da remota que usa um WebSocket.
6. Logs e monitoramento de erros no dispositivo
O uso de logs é fundamental para rastrear problemas.
No código:
console.log('Usuário logado:', usuario.id);
console.warn('Cache expirado, recarregando dados...');
Visualização no Metro:
- Os logs aparecem no terminal com o prefixo [React Native].
- Filtre por nível:
text
npx react-native start | grep "\[React Native\]"
Ferramentas nativas:
- Android: adb logcat | grep ReactNativeJS
text
adb logcat -s ReactNativeJS:V
- iOS: Console do Xcode (Window > Devices and Simulators > selecione o dispositivo > abra o console).
Crash reporting:
Configure o Sentry no projeto:
npm install @sentry/react-native
import * as Sentry from '@sentry/react-native';
Sentry.init({ dsn: 'https://...' });
Sentry.captureException(new Error('Erro no pagamento'));
7. Depuração de problemas específicos de dispositivos físicos
Dispositivos reais revelam problemas que simuladores escondem.
Performance:
- Use o Flipper com a aba "Performance" ou instale react-native-performance:
text
npm install react-native-performance
text
import { perf } from 'react-native-performance';
perf.measure('inicio', 'fim');
Layout:
- Teste em dispositivos com diferentes resoluções. Use o Layout Inspector do Flipper para identificar elementos fora do lugar.
Funcionalidades nativas:
- Para depurar a câmera, adicione logs nos callbacks:
text
const handleTakePhoto = async () => {
const photo = await camera.takePicture();
console.log('Foto capturada:', photo.uri);
};
Erros comuns:
- "Unable to load script": Verifique a conexão com o Metro e execute adb reverse tcp:8081 tcp:8081.
- "Red screen of death": Leia a mensagem de erro no dispositivo e verifique logs no terminal.
- Conflitos de versão: Limpe o cache com npx react-native start --reset-cache.
8. Dicas avançadas e boas práticas
React DevTools standalone:
- Instale globalmente:
text
npm install -g react-devtools
- Execute react-devtools e conecte ao app em modo debug.
react-native-debugger:
- Alternativa que integra Chrome DevTools e React DevTools em uma única interface.
- Baixe em github.com/jhen0409/react-native-debugger.
Automação de testes:
- Use Detox para testes end-to-end em dispositivos físicos:
text
npm install detox --save-dev
- Configure no arquivo .detoxrc.js e execute detox test.
Checklist final:
1. Verifique a conexão USB ou Wi-Fi.
2. Reinicie o Metro bundler se houver lentidão.
3. Limpe o cache com npx react-native start --reset-cache.
4. Teste em pelo menos dois dispositivos físicos (Android e iOS).
Depurar em dispositivos físicos é uma prática que economiza horas de retrabalho. Com as ferramentas certas — Flipper, Chrome DevTools, Safari Web Inspector e logs nativos — você consegue identificar e corrigir problemas com precisão, garantindo apps estáveis e performáticos.
Referências
- Documentação oficial do React Native - Depuração — Guia completo de depuração, incluindo configuração de dispositivos físicos e uso do Flipper.
- Flipper - Getting Started — Instalação e configuração do Flipper para depuração de apps React Native.
- Sentry para React Native — Configuração de crash reporting e monitoramento de erros em produção.
- Safari Web Inspector Guide — Documentação oficial da Apple sobre inspeção de páginas web e apps em dispositivos iOS.
- react-native-debugger no GitHub — Ferramenta standalone que combina Chrome DevTools e React DevTools para depuração avançada.
- Detox - Testes End-to-End — Framework de testes automatizados para React Native em dispositivos físicos.