O Expo Go é uma app gratuita, disponível na App Store e no Google Play, que corre o seu projeto Expo num telemóvel real sem compilar nada. Arranca o projeto no computador, lê um código QR, e o ecrã que estava a editar aparece no seu iPhone ou dispositivo Android alguns segundos depois. Guarda um ficheiro, o telemóvel atualiza-se. Para uma primeira versão de uma app, é o caminho mais curto entre o código e um ecrã tátil a sério.
É também a ferramenta que os principiantes mais interpretam mal. O Expo Go não é a sua app, e nunca é o binário que vai publicar: é um contentor que já inclui a parte nativa do Expo SDK e carrega apenas o seu JavaScript. Esse único facto explica o que consegue testar, o que não consegue, os erros de versão que vai encontrar e a razão por que o Expo acrescentou uma regra de início de sessão com conta em 2026. Este guia cobre tudo isso, com o fluxo para as duas plataformas.
Se o Expo em si é novidade para si, comece pela nossa apresentação sobre o que é o Expo; este artigo parte do princípio de que tem um projeto e quer vê-lo num telemóvel.
O que o Expo Go faz na realidade
Uma app Expo tem duas metades. A metade nativa é código compilado: o runtime do React Native, os módulos do Expo SDK para a câmara, a localização, as notificações ou os ficheiros, e qualquer biblioteca nativa que acrescente. A metade JavaScript são os seus ecrãs e a sua lógica, empacotados pelo servidor de desenvolvimento Metro. Compilar a metade nativa demora minutos num Mac ou num serviço de build na cloud; empacotar a metade JavaScript demora segundos.
O Expo Go traz a metade nativa já compilada, uma vez, para toda a gente: um conjunto fixo de módulos do Expo SDK compilados numa única app que o Expo publica nas lojas. Quando lê o código QR, o Expo Go pede um manifesto ao Metro, descarrega o seu bundle JavaScript pela rede local e corre-o dentro da sua própria shell nativa. Nada é compilado do seu lado. É por isso que é tão rápido, e é por isso que só funciona quando o seu projeto usa a mesma versão do SDK que o build do Expo Go instalado no telemóvel.
Testar no iPhone e no Android, passo a passo
O fluxo é o mesmo nas duas plataformas, com uma diferença em 2026: no iPhone, o Expo Go verifica agora que tem sessão iniciada com a mesma conta Expo que a linha de comandos que arrancou o projeto.
1. Instalar o Expo Go e iniciar sessão
No iPhone, instale o Expo Go a partir da App Store. A versão para o SDK 57 voltou à loja em setembro de 2026, depois de vários meses na fila de revisão da Apple, durante os quais tinha de ser instalada como build pessoal do TestFlight. No Android, instale-o a partir do Google Play, ou de expo.dev/go se precisar de uma versão do SDK mais antiga, que a loja já não oferece.
Depois crie uma conta Expo gratuita em expo.dev, se ainda não tiver uma, e inicie sessão duas vezes: no Expo Go, no telemóvel, e na Expo CLI, no computador, com o comando expo login. Desde 3 de setembro de 2026, o Expo exige a mesma conta dos dois lados para abrir um projeto no SDK 57 no Expo Go num iPhone físico. Os simuladores estão isentos, os development builds estão isentos, e o Android receberá a mesma regra mais tarde. Se as contas forem diferentes, o projeto simplesmente recusa-se a abrir.
2. Arrancar o projeto e ler o código QR
Na pasta do projeto, execute npx expo start. O Metro arranca, imprime um código QR no terminal e um endereço da forma exp://192.168.x.x:8081. No iPhone, abra a app Câmara integrada, aponte-a ao código QR e toque na faixa: abre o Expo Go diretamente. No Android, abra o Expo Go e use o botão «Scan QR code». Se o telemóvel e o computador se virem um ao outro, o bundle é descarregado e o seu primeiro ecrã aparece.
A partir daí, cada vez que guarda dispara o Fast Refresh: o componente alterado recarrega no lugar, mantendo o estado da app quando consegue. Abane o telemóvel para abrir o menu de programador, que permite recarregar manualmente, abrir o inspetor de elementos ou ativar o monitor de desempenho.
3. Mesma rede, túnel e os erros habituais
O telemóvel carrega o bundle a partir do seu computador, por isso os dois têm de estar na mesma rede Wi-Fi, e a rede tem de permitir que os dispositivos comuniquem entre si. As redes de escritórios e de hotéis bloqueiam isso muitas vezes. A solução é um túnel: npx expo start --tunnel encaminha a ligação por um URL ngrok que funciona a partir de qualquer rede, à custa de um primeiro carregamento mais lento. A maioria dos restantes problemas cabe num punhado de mensagens:
| O que vê | O que significa | O que fazer |
|---|---|---|
| Project is incompatible with this version of Expo Go | O SDK do seu projeto e o Expo Go instalado não coincidem | Atualize o projeto com npx expo install expo@latest, ou instale o build do Expo Go para o seu SDK a partir de expo.dev/go |
| O projeto não abre, ou pede-lhe para iniciar sessão | Só no iPhone: a CLI e o Expo Go não têm sessão iniciada com a mesma conta | Execute npx expo whoami, inicie sessão com expo login e confira o nome da conta no separador de perfil do Expo Go |
| Something went wrong: could not connect to the server | O telemóvel não consegue chegar ao seu computador pela rede | O mesmo Wi-Fi para os dois, a porta 8081 permitida na firewall, ou reinicie com --tunnel |
| Native module cannot be null, ou um ecrã vermelho ao arrancar | O projeto usa código nativo que não faz parte do Expo SDK | O Expo Go não o consegue correr: passe a um development build para esse projeto |
| A app abre mas uma funcionalidade não faz nada, em silêncio | Uma capacidade que o Expo Go não suporta, como as notificações push remotas | Teste essa funcionalidade num development build ou no TestFlight |
O que o Expo Go não consegue testar, e o que usar em vez dele
Como a metade nativa é fixa, o Expo Go chega ao seu limite exatamente onde o seu projeto precisa de código nativo que não está no Expo SDK: uma biblioteca nativa de terceiros, um config plugin que altera o projeto iOS ou Android, um módulo Swift ou Kotlin personalizado. Também não consegue mostrar-lhe aquilo que só existe no seu próprio binário: o ícone da app e o ecrã de arranque, o bundle identifier, os deep links, as compras na app. Desde o SDK 53, o Expo também retirou as notificações push remotas do Expo Go e remete para os development builds.
O substituto é um development build: a sua própria app, compilada uma vez com as ferramentas de programador lá dentro, que instala no telemóvel e depois recarrega em direto exatamente como no Expo Go. Contém os seus módulos nativos, o seu ícone e os seus identificadores, e não precisa de uma conta Expo para abrir um projeto. A verificação final antes da submissão é ainda outra ferramenta: o TestFlight no iOS e o teste interno no Google Play instalam o verdadeiro binário de lançamento.
| Quer verificar | Expo Go | Development build | TestFlight / teste interno do Play |
|---|---|---|---|
| Ecrãs, navegação, layout num ecrã real | Sim | Sim | Sim |
| Câmara, localização, sensores, seletor de imagens (módulos expo-*) | Sim | Sim | Sim |
| Biblioteca nativa de terceiros ou módulo nativo personalizado | Não | Sim | Sim |
| Notificações push remotas | Não | Sim | Sim |
| Ícone da app, ecrã de arranque, deep links, compras na app | Não | Sim | Sim |
| O binário exato que os utilizadores vão instalar | Não | Não | Sim |
| Custo de configuração | Nenhum | Um build (EAS ou local), depois recarregamento em direto | Um build de lançamento e uma conta de loja |
O Expo Go dentro da Cadrant
Os projetos móveis nativos criados com o criador de apps móveis da Cadrant são apps Expo e React Native, por isso aplicam-se as mesmas regras. O editor pré-visualiza a app numa moldura de telemóvel, e um código QR abre o projeto em direto no Expo Go no seu próprio dispositivo. Por causa da regra de início de sessão de 2026, o código QR aparece assim que a sua conta Expo estiver ligada: crie uma conta gratuita em expo.dev, gere um token de acesso pessoal, cole-o em Definições, Integrações, Expo, e depois inicie sessão no Expo Go no telemóvel com essa mesma conta. A Cadrant arranca o servidor de desenvolvimento com o seu token, por isso a verificação da conta passa.
A maioria das APIs expo-* corre aí diretamente, o que cobre os testes do dia a dia: câmara, localização, sensores, seletor de imagens, notificações locais. Para código nativo fora do SDK, e para uma verificação final, publique um build real: o binário iOS é compilado na sua conta Expo e entregue no seu App Store Connect, onde o TestFlight o instala nos seus dispositivos; no Android, o build chega ao teste interno da sua Play Console. A documentação das apps móveis nativas detalha os dois caminhos.
A versão curta
- O Expo Go é um contentor pré-compilado do Expo SDK: carrega o seu JavaScript, nunca o seu código nativo, e tem de corresponder à versão do SDK do seu projeto.
- No iPhone, desde setembro de 2026, inicie sessão com a mesma conta Expo na CLI e no Expo Go, senão o projeto não abre; simuladores e development builds estão isentos.
- Mesmo Wi-Fi ou um túnel, e depois ler o código: a app Câmara no iPhone, o leitor integrado no Android.
- Módulos nativos personalizados, notificações push remotas, ícones, deep links e compras precisam de um development build; o binário exato precisa do TestFlight ou do teste interno do Play.
Use o Expo Go para aquilo em que é melhor, ver um ecrã num telemóvel real trinta segundos depois de o escrever, e passe a um development build no dia em que o seu projeto precisar de algo que o contentor não tem. A mudança é um único build, não uma reescrita.