Criar um app com Claude Code: tutorial para iPhone
Por Mehdi Azizi
Atualizado em , 15 min
Instale o Claude Code, crie o projeto Expo, escreva o CLAUDE.md, peça uma tela por vez e envie para o TestFlight com EAS: o tutorial completo.
Criar um app com Claude Code: a resposta curta
Para criar um app com Claude Code, você precisa de um acesso pago ao Claude Code (assinatura compatível ou Console com cobrança por uso), Node.js, um iPhone com Expo Go e um projeto Expo. Você escreve um arquivo CLAUDE.md que descreve sua stack e suas regras, pede uma tela por vez, testa cada tela no seu iPhone e depois envia o app para o TestFlight com EAS.
Este tutorial complementa meu guia criar um app iOS com IA, que explica o que a IA faz bem e onde ela erra. Aqui a gente parte para a prática: os comandos, os arquivos, os prompts.
Eu programo meus apps iOS com Claude Code e Cursor todos os dias. Minha stack: React Native, Expo, EAS, RevenueCat e Supabase. Solys, um despertador com minijogos, e TradaZen, um app de treino de trading, estão publicados na App Store. Nolera e Clic foram rejeitados pela Apple e depois corrigidos. Tudo o que vem a seguir sai desse trabalho.
Para ver esse método aplicado a um app publicado, documentei a trajetória do TradaZen, do primeiro commit às rejeições da Apple e às mudanças de rumo. Esse relato complementa as etapas do tutorial.
Etapa 1: reunir os pré-requisitos
Antes do primeiro comando, confira se você tem tudo isto.
Uma conta Claude paga
O Claude Code não está incluído no plano gratuito do claude.ai. Segundo a documentação da Anthropic, é preciso uma conta Pro, Max, Team, Enterprise ou Console. O plano Pro já dá para começar, dentro dos limites de uso dele.
Node.js e um terminal
O Expo pede Node.js na versão LTS, no macOS, Windows ou Linux. O Claude Code roda no macOS 13 ou superior, Windows 10 ou superior e nas principais distribuições Linux.
Um iPhone e o Expo Go
Instale o Expo Go pela App Store no seu iPhone para testar suas primeiras telas sem compilar seu próprio app. Antes de criar o projeto, confira na página do Expo Go a versão do SDK compatível com a sua instalação. O SDK mais recente e a versão distribuída na App Store nem sempre ficam disponíveis ao mesmo tempo: o Expo documentou, por exemplo, essa defasagem em maio de 2026. Então não parta de um número de versão encontrado num tutorial antigo. Para usar seus próprios módulos nativos, planeje uma build de desenvolvimento.
Um Mac? Não é obrigatório
As builds iOS são compiladas nos servidores do Expo com EAS Build, usando a versão do Xcode escolhida pelo seu SDK Expo (ITMS-90725), e o EAS Submit funciona no macOS, Linux e Windows. Ou seja, dá para chegar até o TestFlight a partir de um PC. O guia publicar um app iOS sem Mac detalha esse fluxo.
Uma conta Apple Developer, mais tarde
Você não precisa dela para programar e testar no Expo Go da App Store. Ela passa a ser obrigatória na hora de enviar seu app para o TestFlight. A gente volta nisso na etapa 7.
Etapa 2: instalar o Claude Code
No macOS, Linux ou WSL, o método recomendado pela Anthropic é o instalador nativo:
curl -fsSL https://claude.ai/install.sh | bash
No Windows, no PowerShell:
irm https://claude.ai/install.ps1 | iex
Depois confira se a instalação funcionou:
claude --version
Se preferir npm, o comando é npm install -g @anthropic-ai/claude-code. Não coloque sudo na frente: a documentação desaconselha isso explicitamente.
Na primeira vez que você roda claude, um navegador abre para você entrar na sua conta. Depois é só escrever em português: o Claude lê seus arquivos, propõe alterações e executa comandos, com a sua permissão.
Etapa 3: criar o projeto Expo
Vá até a pasta onde você guarda seus projetos e rode:
npx create-expo-app@latest meu-app
cd meu-app
npx expo start
Se a ferramenta oferecer a escolha entre compatibilidade com o Expo Go da App Store e o SDK mais recente, escolha a compatibilidade para este exercício. Em qualquer caso, confira se a versão criada é suportada pelo Expo Go instalado no seu iPhone antes de continuar. Você poderá preparar uma build de desenvolvimento quando o projeto precisar.
Um QR code aparece no terminal. Escaneie com a câmera do iPhone: o app abre no Expo Go. Um detalhe costuma travar na primeira vez: o Expo Go só abre seu projeto se o Expo CLI e o Expo Go estiverem conectados à mesma conta Expo. Rode npx expo login no computador e entre com a mesma conta no app.
Por que Expo e não Swift? O Claude conhece muito bem React Native, e você testa sem Mac. Explico essa escolha na página React Native e Expo para um app mobile.
Tenha em mente um limite do Expo Go: ele só contém os módulos nativos que já vêm embutidos. Assim que você adicionar uma biblioteca nativa que ele não conhece, as compras in-app por exemplo, vai precisar de uma build de desenvolvimento. Isso não é problema para as primeiras telas.
Escolher o ambiente de teste certo
Expo Go, uma build de desenvolvimento e TestFlight não provam a mesma coisa. O Expo descreve a build de desenvolvimento como o seu próprio app de teste, com os módulos nativos de que o projeto precisa.
| O que você quer verificar | Onde testar | Limites do teste |
|---|---|---|
| Exibir uma primeira tela e testar a navegação | Expo Go, com um SDK compatível | O comportamento de módulos nativos ausentes do Expo Go |
| Usar uma biblioteca nativa adicionada ao projeto | Uma build de desenvolvimento que inclua essa biblioteca | A versão distribuída e a aceitação dela pela Apple |
| Percorrer o app destinado aos testadores e testar as compras | Uma build enviada ao TestFlight e produtos configurados corretamente | Um pagamento real de cliente ou a aprovação para venda |
Antes de adicionar uma dependência, pergunte ao Claude: "Ela é compatível com meu SDK e meu ambiente de teste atual? Preciso recompilar o app? Baseie sua resposta na documentação." Assim você evita passar uma noite consertando um módulo que o Expo Go simplesmente não consegue carregar, ou um SDK recusado no envio por API não pública.
Etapa 4: escrever o arquivo CLAUDE.md do projeto
É a etapa que mais compensa. O Claude Code consegue manter uma memória do projeto, mas você precisa deixar as regras explícitas. O arquivo CLAUDE.md, na raiz do projeto, traz instruções comuns a todas as sessões. É ali que você escreve o que o Claude não tem como adivinhar.
Na pasta do projeto, rode claude e digite /init. Segundo a documentação, o Claude analisa o projeto e gera um primeiro CLAUDE.md com os comandos e convenções que encontrar. Depois você completa com as suas regras. A Anthropic recomenda ficar abaixo de 200 linhas: quanto maior o arquivo, menos as instruções são seguidas.
Aqui vai um exemplo curto, parecido com o que eu uso:
# Meu app
## Stack
- Expo (SDK do create-expo-app), React Native, TypeScript strict
- Navegação: Expo Router, um arquivo por tela em app/
- Dados: Supabase (mais tarde), nunca uma chave secreta no app
## Regras
- Uma tela por vez. Não mexa em arquivos fora do pedido.
- Nenhuma altura fixa em pontos: tamanhos relativos à tela,
ScrollView se o conteúdo puder passar do limite.
- Cada tela trata 3 estados: carregando, vazio, erro.
- Textos da interface em português, com acentuação correta.
- Antes de alterar mais de 2 arquivos: proponha um plano e espere minha aprovação.
## Comandos
- Rodar: npx expo start
- Testes: usar o script que realmente existe no package.json.
Se ainda não existir, avisar; não anunciar testes aprovados.
- Tipos: npx tsc --noEmit
- Depois de cada alteração: rodar os testes e os tipos, depois me dizer
o que mudou e como verificar no iPhone.
A regra sobre alturas fixas não está ali por acaso. A gente volta nisso na etapa 6.
Etapa 5: um prompt por tela
"Crie um app de acompanhamento de hábitos com assinatura" gera um projeto enorme, frágil, impossível de revisar. O método que funciona é o contrário: um pedido, uma tela, um resultado que você consegue testar em cinco minutos.
Comece por um plano
Para tudo o que mexe em vários arquivos, passe para o modo plano. Aperte Shift+Tab até ver plan mode on na barra de status. Nesse modo, o Claude lê os arquivos e propõe um plano, mas não altera nada antes da sua aprovação. Você revisa, corrige e depois aprova.
Um primeiro prompt de enquadramento fica assim:
Quero um app de acompanhamento de hábitos. Versão 1: uma única função,
marcar os hábitos do dia. Proponha a lista de telas e a
estrutura de pastas. Não escreva código por enquanto.
Descreva a tela, seus estados e seus limites
Depois, um prompt por tela. Quanto mais casos-limite você nomeia, menos o Claude esquece:
Crie a tela app/index.tsx que lista os hábitos do dia.
- Cada linha: nome do hábito, caixa de seleção, sequência atual.
- Estado vazio: um texto e um botão "Adicionar um hábito".
- Estado de carregamento e estado de erro com um botão "Tentar de novo".
- Os dados vêm de um array local por enquanto.
- Precisa caber tanto num iPhone SE quanto no maior iPhone:
sem altura fixa, a lista rola.
Rode os testes e os tipos no final.
Corrija sem deixar reescrever tudo
Quando um detalhe não está certo, seja preciso e limite o escopo:
No meu iPhone, o botão "Adicionar um hábito" fica por baixo da barra
inferior quando a lista é longa. Corrija apenas esse problema em
app/index.tsx, sem mexer nos outros arquivos. Explique a causa.
Você também pode colar uma captura de tela no terminal: o Claude lê.
Exercício: um hábito que continua marcado depois de reabrir o app
Este é um exercício didático para fazer no seu projeto, não a captura de uma funcionalidade já entregue. O objetivo é passar de uma tela gerada para um comportamento verificável. Ele não exige conta de usuário nem compra integrada.
- Mantenha um único hábito local chamado "Ler 10 minutos".
- Peça uma caixa de seleção e um salvamento local compatível com seu projeto Expo.
- Peça ao agente para indicar os arquivos alterados, a eventual dependência e os comandos realmente executados.
- Instale ou abra o app no iPhone e faça as verificações abaixo.
A partir da tela existente, torne o hábito "Ler 10 minutos"
marcável e mantenha o estado dele depois de fechar e reabrir o app.
Use o armazenamento local compatível com as dependências do projeto.
Não crie conta, servidor, assinatura nem estatística extra.
Antes de programar, explique como vai tratar o carregamento e uma falha
de leitura ou de gravação. Depois, faça uma alteração limitada.
No final: arquivos alterados, comandos executados, limites não testados
e os passos exatos para verificar o resultado no iPhone.
| Ação no seu iPhone | Resultado esperado | Se falhar |
|---|---|---|
| Abrir o app pela primeira vez | O hábito e a caixa aparecem, sem erro | Verificar o estado inicial e o carregamento do armazenamento |
| Marcar, fechar e reabrir o app | O hábito continua marcado | Conferir a gravação e depois a leitura da mesma chave |
| Desmarcar e reabrir | O hábito continua desmarcado | Verificar se o valor false também é salvo |
| Refazer o percurso em modo avião | A função local continua disponível | Encontrar uma dependência de rede adicionada sem motivo |
| Aumentar o tamanho do texto | O nome e o controle continuam acessíveis | Remover as restrições que cortam ou escondem a ação |
Não peça "reescreva tudo" se uma linha falhar. Descreva a ação, o resultado esperado e o resultado observado. Por exemplo: "Depois de reabrir, a caixa volta a ficar vazia mesmo eu tendo marcado. Explique a causa e corrija a persistência sem alterar o design."
Baixar o modelo de CLAUDE.md e a ficha de verificação (.md). Abra no seu editor ou num app de notas. Adapte os comandos ao seu projeto antes de entregá-lo ao agente.
Etapa 6: revisar e testar
O Claude Code escreve código que parece certo. Só os seus testes e o seu iPhone dizem se ele está.
Testes para não quebrar o que funciona
Quanto mais o app cresce, mais cada pedido corre o risco de quebrar uma tela já validada. O projeto criado pelo Expo não vem com testes: primeiro peça ao Claude para instalar o Jest com jest-expo, como recomenda a documentação do Expo. Depois peça testes para a lógica importante (cálculo de uma sequência, validação de um formulário) e faça com que sejam rodados depois de cada alteração. É por isso que os comandos de teste estão no CLAUDE.md: o Claude executa sem você precisar lembrar. Com um arquivo de regras e testes, a IA quebra muito menos o que já funcionava.
Revise cada alteração
Você não precisa entender cada linha. Precisa saber quais arquivos mudaram e por quê. Se o Claude mexeu num arquivo fora do assunto, pergunte o motivo antes de aceitar. Depois faça a pergunta: "o que pode quebrar aqui?".
Teste num iPhone pequeno e num grande
Essa foi a lição que mais me custou caro. O Solys foi rejeitado pela Apple com base na regra 2.1: a demo do onboarding era impossível de vencer num iPad Air, onde o app rodava em modo de compatibilidade com iPhone. A causa: alturas definidas em pontos fixos, não relativas ao tamanho da tela. No meu iPhone, estava tudo certo. O código tinha sido revisado, os testes estavam verdes. Nenhuma ferramenta tinha olhado a tela em outro tamanho.
Desde então, verifico cada tela no mínimo no menor iPhone e no maior. Se você só tem um celular, o simulador do Xcode no Mac ou um amigo com outro modelo resolve. Preste atenção principalmente em textos longos, no teclado aberto nos formulários e nos botões fixados embaixo.
O que o Claude Code faz mal
O Claude Code é excelente em telas e lógica. Fora da sua pasta, ele é bem menos confiável.
A assinatura e os certificados
Sem uma conexão autorizada à sua conta Apple, o Claude não sabe o estado dela. Ele pode inventar um procedimento de certificados que mistura Xcode e Expo. Deixe o EAS cuidar da assinatura: a documentação do Expo explica que o EAS CLI pode gerar e guardar esses arquivos para você, depois de conectar sua conta Apple Developer.
App Store Connect
A página do app, as declarações de privacidade, as capturas de tela e os links legais são dados a verificar no App Store Connect. Agora o Claude Code consegue agir num navegador conectado pela integração com o Chrome, com os acessos necessários. Isso não garante que os campos estejam corretos: revise as informações, confira as contas usadas e valide você mesmo os compromissos e o envio para revisão.
As assinaturas
Escrever um paywall leva dez minutos. Fazer bater os produtos do App Store Connect, a configuração deles no RevenueCat e o código é outra história. Um identificador com um caractere diferente e o paywall fica vazio para o revisor. As armadilhas mais comuns estão em os erros de paywall iOS de iniciante.
Os casos-limite
Sem instrução, o Claude trata o caso normal. Sem rede, lista vazia, compra interrompida: cabe a você nomear esses casos.
A segurança do Supabase
Quando o Claude cria tabelas no Supabase, confira se a segurança em nível de linha (RLS) está ativada, com políticas que limitam cada usuário aos próprios dados. Confira também que nenhuma chave secreta foi parar no código do app. Escreva essas duas proibições no seu CLAUDE.md assim que conectar um banco.
Etapa 7: ir para o TestFlight com EAS
Suas telas foram verificadas no Expo Go ou numa build de desenvolvimento, dependendo dos módulos usados. Agora é hora da build que vai ser distribuída aos testadores.
Preparar o EAS
Agora você precisa de uma conta Apple Developer paga: o Expo lembra que ela é obrigatória para enviar um app à App Store. Depois, instale a ferramenta do Expo e configure o projeto:
npm install --global eas-cli
eas login
eas build:configure
Adicione um bundle identifier único no app.json, em ios.bundleIdentifier, por exemplo com.tonnom.monapp.
Compilar e enviar
eas build --platform ios --profile production
eas submit --platform ios
O primeiro comando compila o app nos servidores do Expo. Na primeira execução, o EAS oferece conectar à sua conta Apple para criar os certificados. O segundo envia a build ao App Store Connect. Você também pode fazer tudo de uma vez com eas build --platform ios --auto-submit.
A build precisa ser processada pela Apple antes de aparecer no TestFlight, e esse processamento pode recusá-la, por exemplo com ITMS-90717 por um ícone transparente. Um envio bem-sucedido não significa que ela já pode ser instalada: confira o status dela no App Store Connect. Testadores internos, externos e a revisão beta estão explicados no meu guia TestFlight para testar seu app de iPhone.
Refaça as verificações da etapa 6 nessa build. Um app que funciona no Expo Go ainda pode travar em produção, por exemplo quando falta um módulo nativo.
Quanto custa de verdade
Estes são os preços exibidos pelos serviços e verificados em 27 de setembro de 2026, em dólares. O valor cobrado também depende da sua região, dos impostos e do seu uso: confira o plano antes de assinar.
- Assinatura Claude: o plano Pro custa 20 dólares por mês, ou 17 dólares por mês no pagamento anual. Os planos Max começam em 100 dólares por mês, para mais uso.
- Conta Apple Developer: 99 dólares por ano, obrigatória para o TestFlight e a App Store.
- EAS: o plano gratuito do Expo inclui 15 builds iOS por mês, numa fila de baixa prioridade. O plano Starter custa 19 dólares por mês, mais o uso adicional.
Para um protótipo pequeno, o Pro e o plano gratuito do EAS podem servir de base, se você ficar dentro das cotas. Some a conta Apple antes do TestFlight e calcule à parte os serviços realmente necessários: banco de dados, armazenamento ou API paga. O modelo de orçamento de um primeiro app ajuda a organizar esses itens. O seu tempo de configuração e verificação também precisa entrar na conta.
Os limites honestos, e onde a gente trava
O Claude Code mudou quem consegue criar um app de iPhone. Não mudou o que a Apple exige para publicá-lo. Uma rejeição chega rápido: o Solys levou, o Nolera e o Clic também. Os motivos mais frequentes estão em por que a Apple rejeita um app.
Com este tutorial você consegue ir sozinho até o TestFlight. Onde a gente mais trava é depois: conectar as assinaturas, preparar o material para o revisor, entender uma rejeição. Para a visão geral do percurso, leia a página criar um app de iPhone.
Para essa parte, o iOS Kit reúne o código inicial dos meus apps, assinaturas incluídas, as skills do Claude Code para cada etapa e o Apple Review Kit. O percurso completo está na página curso de Claude Code para criar um app iOS.
Já travou e não sabe onde? O diagnóstico gratuito mostra o que realmente está te segurando e te envia meu checklist antirrejeição da Apple.
Perguntas frequentes
Dá para criar um app de iPhone com Claude Code sem saber programar?
Sim para as telas e a lógica simples, se você revisar e testar cada etapa. Não se você espera não entender nada. Você precisa saber ler uma mensagem de erro, rodar um comando e verificar o que o Claude alterou. Isso se aprende rápido construindo.
O Claude Code é gratuito?
Não. O Claude Code exige uma conta Pro, Max, Team, Enterprise ou Console. O plano gratuito do claude.ai não inclui. O plano Pro permite começar, com limites de uso que você precisa acompanhar.
Preciso de um Mac para criar um app iOS com Claude Code?
Não. Você programa em qualquer computador, testa no Expo Go no seu iPhone, e o EAS compila e envia o app pelos servidores do Expo. Um Mac continua sendo prático para o simulador, mas não é obrigatório.
Claude Code ou Cursor para um app React Native?
Uso os dois, todos os dias. O Claude Code trabalha no terminal e encadeia sozinho alteração e testes. O Cursor é um editor. O método importa mais que a ferramenta: regras, uma tela por vez, testes.
Quanto tempo leva para publicar um primeiro app com Claude Code?
Depende do tamanho do app e do seu tempo. Um app com uma única função vai bem mais rápido. A parte mais imprevisível continua sendo a revisão da Apple.
O Claude Code consegue configurar as assinaturas in-app?
Ele consegue escrever o código do paywall e do RevenueCat. Com ferramentas conectadas e as permissões necessárias, também pode atuar nos consoles. Nunca conclua, só porque o código existe, que os produtos estão configurados: confira os identificadores, os preços e os direitos após a compra, e depois teste a compra e a restauração no TestFlight. Os erros frequentes dos paywalls iOS mostram os pontos a verificar.