Crear una app amb Claude Code: tutorial per a iPhone
Per Mehdi Azizi
Actualitzat el , 15 min
Instal·lar Claude Code, crear el projecte Expo, escriure el CLAUDE.md, fer prompts pantalla a pantalla i enviar a TestFlight amb EAS: el tutorial complet.
Crear una aplicació amb Claude Code: la resposta curta
Per crear una aplicació amb Claude Code necessites un accés de pagament a Claude Code (subscripció compatible o Console de pagament per ús), Node.js, un iPhone amb Expo Go i un projecte Expo. Escrius un fitxer CLAUDE.md que descriu el teu stack i les teves regles, demanes una pantalla cada vegada, proves cada pantalla al teu iPhone i després envies l'app a TestFlight amb EAS.
Aquest tutorial complementa la meva guia crear una app iOS amb IA, que explica què fa bé la IA i en què falla. Aquí passem a la pràctica: les ordres, els fitxers, els prompts.
Programo les meves apps iOS amb Claude Code i Cursor cada dia. El meu stack: React Native, Expo, EAS, RevenueCat i Supabase. Solys, un despertador amb minijocs, i TradaZen, una app d'entrenament de trading, estan publicades a l'App Store. Nolera i Clic van ser rebutjades per Apple i després corregides. Tot el que ve a continuació surt d'aquesta feina.
Per veure aquest mètode aplicat a una app publicada, he documentat el recorregut de TradaZen, des del primer commit fins als rebutjos d'Apple i els canvis de rumb. Aquesta experiència complementa els passos del tutorial.
Pas 1: reunir els requisits previs
Abans de la primera ordre, comprova que tens tot això.
Un compte de Claude de pagament
Claude Code no està inclòs a l'oferta gratuïta de claude.ai. Segons la documentació d'Anthropic, cal un compte Pro, Max, Team, Enterprise o Console. L'oferta Pro permet començar, dins dels seus límits d'ús.
Node.js i un terminal
Expo demana Node.js en versió LTS, a macOS, Windows o Linux. Claude Code funciona a macOS 13 o posterior, Windows 10 o posterior i les principals distribucions de Linux.
Un iPhone i Expo Go
Instal·la Expo Go des de l'App Store al teu iPhone per provar les primeres pantalles sense compilar la teva pròpia app. Abans de crear el projecte, comprova la versió de l'SDK compatible amb la teva instal·lació a la pàgina d'Expo Go. L'últim SDK i la versió distribuïda a l'App Store no sempre estan disponibles al mateix moment: Expo va documentar, per exemple, aquest desfasament el maig del 2026. Així que no comencis a partir d'un número de versió trobat en un tutorial antic. Per fer servir els teus propis mòduls natius, preveu una build de desenvolupament.
Un Mac? No és obligatori
Les builds iOS es compilen als servidors d'Expo amb EAS Build, amb la versió de Xcode que tria el teu SDK d'Expo (ITMS-90725), i EAS Submit funciona a macOS, Linux i Windows. Per tant, pots arribar fins a TestFlight des d'un PC. La guia publicar una app iOS sense Mac detalla tota aquesta cadena.
Un compte d'Apple Developer, més endavant
No el necessites per programar i provar a l'Expo Go de l'App Store. Esdevé obligatori quan vols enviar l'app a TestFlight. Hi tornem al pas 7.
Pas 2: instal·lar Claude Code
A macOS, Linux o WSL, el mètode recomanat per Anthropic és l'instal·lador natiu:
curl -fsSL https://claude.ai/install.sh | bash
A Windows, a PowerShell:
irm https://claude.ai/install.ps1 | iex
Després comprova que la instal·lació ha funcionat:
claude --version
Si prefereixes npm, l'ordre és npm install -g @anthropic-ai/claude-code. No hi posis sudo al davant, la documentació ho desaconsella explícitament.
El primer cop que executes claude, s'obre un navegador perquè iniciïs sessió al teu compte. Després escrius en català: Claude llegeix els teus fitxers, proposa canvis i executa ordres, amb el teu permís.
Pas 3: crear el projecte Expo
Situa't a la carpeta on guardes els teus projectes i executa:
npx create-expo-app@latest my-app
cd my-app
npx expo start
Si l'eina et proposa triar entre la compatibilitat amb l'Expo Go de l'App Store i l'últim SDK, tria la compatibilitat per a aquest exercici. En qualsevol cas, comprova que la versió creada és compatible amb l'Expo Go instal·lat al teu iPhone abans de continuar. Ja prepararàs una build de desenvolupament quan el projecte la necessiti.
Al terminal apareix un codi QR. Escaneja'l amb la càmera de l'iPhone: l'app s'obre a Expo Go. Hi ha un detall que sovint bloqueja la primera vegada: Expo Go només obre el teu projecte si Expo CLI i Expo Go estan connectats al mateix compte d'Expo. Executa npx expo login a l'ordinador i inicia sessió amb el mateix compte a l'app.
Per què Expo i no Swift? Claude coneix molt bé React Native, i pots provar sense Mac. Explico aquesta elecció a la pàgina React Native i Expo per a una app mòbil.
Tingues present un límit d'Expo Go: només conté els mòduls natius que ja porta integrats. Tan bon punt afegeixes una llibreria nativa que no coneix, les compres dins l'app per exemple, necessitaràs una build de desenvolupament. Per a les primeres pantalles no és cap problema.
Triar l'entorn de prova adequat
Expo Go, una build de desenvolupament i TestFlight no demostren el mateix. Expo descriu la build de desenvolupament com la teva pròpia app de prova, amb els mòduls natius que el projecte necessita.
| Què vols comprovar | On provar-ho | Límits de la prova |
|---|---|---|
| Mostrar una primera pantalla i provar-ne la navegació | Expo Go, amb un SDK compatible | El comportament dels mòduls natius que Expo Go no inclou |
| Fer servir una biblioteca nativa afegida al projecte | Una build de desenvolupament que inclogui aquesta biblioteca | Ni la versió distribuïda ni la seva acceptació per part d'Apple |
| Recórrer l'app destinada als testers i després provar-ne les compres | Una build enviada a TestFlight i uns productes ben configurats | Un pagament real d'un client o la validació de la posada a la venda |
Abans d'afegir una dependència, pregunta a Claude: «És compatible amb el meu SDK i el meu entorn de prova actual? Cal recompilar l'app? Basa la resposta en la documentació.» Així evites passar una nit corregint un mòdul que Expo Go simplement no pot carregar, o un SDK rebutjat a l'enviament per API no pública.
Pas 4: escriure el fitxer CLAUDE.md del projecte
És el pas més rendible. Claude Code pot conservar una memòria de projecte, però n'has d'explicitar les regles. El fitxer CLAUDE.md, situat a l'arrel del projecte, aporta instruccions comunes a totes les sessions. És on escrius el que Claude no pot endevinar.
A la carpeta del projecte, executa claude i després escriu /init. Segons la documentació, Claude analitza el projecte i genera un primer CLAUDE.md amb les ordres i les convencions que troba. Després el completes amb les teves regles. Anthropic recomana quedar-se per sota de 200 línies: com més llarg és el fitxer, menys se segueixen les instruccions.
Aquí tens un exemple curt, semblant al que faig servir:
# La meva app
## Stack
- Expo (SDK de create-expo-app), React Native, TypeScript strict
- Navegació: Expo Router, un fitxer per pantalla a app/
- Dades: Supabase (més endavant), mai cap clau secreta a l'app
## Regles
- Una pantalla cada vegada. No toquis fitxers fora de la petició.
- Cap alçada fixa en punts: mides relatives a la pantalla,
ScrollView si el contingut pot sobresortir.
- Cada pantalla gestiona 3 estats: càrrega, buit, error.
- Textos de la interfície en català amb accents.
- Abans de programar més de 2 fitxers: proposa un pla i espera el meu vistiplau.
## Ordres
- Executar: npx expo start
- Tests: fer servir l'script que realment hi ha a package.json.
Si encara no existeix, avisar-ho; no anunciar tests superats.
- Tipus: npx tsc --noEmit
- Després de cada canvi: executar els tests i els tipus, i dir-me
què ha canviat i com comprovar-ho a l'iPhone.
La regla sobre les alçades fixes no hi és per casualitat. Hi tornem al pas 6.
Pas 5: fer prompts d'una pantalla cada vegada
«Fes-me una app de seguiment d'hàbits amb subscripció» produeix un projecte enorme, fràgil i impossible de revisar. El mètode que funciona és el contrari: una petició, una pantalla, un resultat que pots provar en cinc minuts.
Comença per un pla
Per a tot el que afecti diversos fitxers, passa al mode pla. Prem Shift+Tab fins que vegis plan mode on a la barra d'estat. En aquest mode, Claude llegeix els fitxers i proposa un pla, però no modifica res sense el teu vistiplau. Ho revises, ho corregeixes i ho valides.
Un primer prompt per emmarcar el projecte s'assembla a això:
Vull una app de seguiment d'hàbits. Versió 1: una sola funció,
marcar els hàbits del dia. Proposa la llista de pantalles i
l'estructura de carpetes. De moment no programis res.
Descriu la pantalla, els seus estats i els seus límits
Després, un prompt per pantalla. Com més casos límit anomenes, menys se n'oblida Claude:
Crea la pantalla app/index.tsx que llista els hàbits del dia.
- Cada fila: nom de l'hàbit, casella, ratxa actual.
- Estat buit: un text i un botó «Afegir un hàbit».
- Estat de càrrega i estat d'error amb un botó «Tornar-ho a provar».
- De moment, les dades vénen d'un array local.
- Ha de cabre tant en un iPhone SE com en l'iPhone més gran:
sense alçades fixes, la llista es desplaça.
Executa els tests i els tipus al final.
Corregeix sense deixar que ho reescrigui tot
Quan un detall no va bé, sigues precís i limita l'abast:
Al meu iPhone, el botó «Afegir un hàbit» queda sota la barra
inferior quan la llista és llarga. Corregeix només aquest problema a
app/index.tsx, sense tocar cap altre fitxer. Explica'n la causa.
També pots enganxar una captura de pantalla al terminal: Claude la llegeix.
Exercici: un hàbit que continua marcat després de reiniciar
Aquí tens un exercici pedagògic per fer al teu projecte, no una captura d'una funcionalitat ja publicada. L'objectiu és passar d'una pantalla generada a un comportament verificable. No demana ni compte d'usuari ni compra integrada.
- Deixa un sol hàbit local anomenat «Llegir 10 minuts».
- Demana una casella i un desament local compatible amb el teu projecte Expo.
- Demana a l'agent que especifiqui els fitxers modificats, la possible dependència i les ordres realment executades.
- Instal·la o obre l'app a l'iPhone i fes les comprovacions següents.
A partir de la pantalla existent, fes que l'hàbit «Llegir 10 minuts»
es pugui marcar i conserva'n l'estat després de tancar i tornar a obrir l'app.
Fes servir l'emmagatzematge local compatible amb les dependències del projecte.
No creïs ni compte, ni servidor, ni subscripció, ni estadístiques addicionals.
Abans de programar, explica com gestionaràs la càrrega i un error
de lectura o de desament. Després, fes un canvi limitat.
Al final: fitxers modificats, ordres executades, límits no provats
i passos exactes per comprovar el resultat a l'iPhone.
| Acció al teu iPhone | Resultat esperat | Si falla |
|---|---|---|
| Obrir l'app per primera vegada | L'hàbit i la casella es veuen, sense errors | Comprovar l'estat inicial i la càrrega de l'emmagatzematge |
| Marcar, tancar i tornar a obrir l'app | L'hàbit continua marcat | Controlar l'escriptura i la lectura de la mateixa clau |
| Desmarcar i reiniciar | L'hàbit continua desmarcat | Comprovar que el valor false també es desa |
| Repetir el recorregut en mode avió | La funció local continua disponible | Detectar una dependència de xarxa afegida sense motiu |
| Augmentar la mida del text | El nom i el control continuen accessibles | Treure les restriccions que tallen o amaguen l'acció |
No demanis «reescriu-ho tot» si una fila falla. Descriu l'acció, el resultat esperat i el resultat observat. Per exemple: «Després de reiniciar, la casella torna a estar buida tot i que l'havia marcada. Explica'n la causa i corregeix la persistència sense modificar el disseny.»
Descarregar la plantilla CLAUDE.md i la fitxa de comprovació (.md). Obre-la al teu editor o en una aplicació de notes. Adapta les ordres al teu projecte abans de passar-la a l'agent.
Pas 6: fer revisar i provar
Claude Code escriu codi que sembla correcte. Només els teus tests i el teu iPhone et diuen si ho és.
Tests per no trencar el que funciona
Com més creix l'app, més risc hi ha que cada petició trenqui una pantalla ja validada. El projecte creat per Expo no té tests: primer demana a Claude que instal·li Jest amb jest-expo, com recomana la documentació d'Expo. Després demana tests per a la lògica important (càlcul d'una ratxa, validació d'un formulari) i fes que els executi després de cada canvi. Per això les ordres de test estan escrites al CLAUDE.md: Claude les executa sense que li hagis de recordar. Amb un fitxer de regles i tests, la IA trenca molt menys el que ja funcionava.
Revisa cada canvi
No cal que entenguis cada línia. Has de saber quins fitxers han canviat, i per què. Si Claude ha tocat un fitxer que no tocava, pregunta-li el motiu abans d'acceptar. Després fes la pregunta: «què es pot trencar aquí?».
Comprova-ho en un iPhone petit i en un de gran
És la lliçó que més car m'ha sortit. Apple va rebutjar Solys per la norma 2.1: la demo de l'onboarding era impossible de guanyar en un iPad Air, on l'app funcionava en mode de compatibilitat d'iPhone. La causa: alçades codificades en punts fixos, no relatives a la mida de la pantalla. Al meu iPhone, tot anava bé. El codi s'havia revisat, els tests estaven en verd. Cap eina havia mirat la pantalla en una altra mida.
Des d'aleshores, comprovo cada pantalla com a mínim en l'iPhone més petit i en el més gran. Si només tens un telèfon, el simulador de Xcode al Mac o un amic amb un altre model et serviran. Fixa't sobretot en els textos llargs, el teclat obert als formularis i els botons fixats a la part inferior.
El que Claude Code fa malament
Claude Code excel·leix en les pantalles i la lògica. Fora de la teva carpeta, és molt menys fiable.
La signatura i els certificats
Sense una connexió autoritzada al teu compte d'Apple, Claude no en coneix l'estat. Pot inventar-se un procediment de certificats que barreja Xcode i Expo. Deixa que EAS gestioni la signatura: la documentació d'Expo explica que EAS CLI pot generar i guardar aquests fitxers per tu, després de connectar-te al teu compte d'Apple Developer.
App Store Connect
La fitxa, les declaracions de privacitat, les captures i els enllaços legals són dades que cal comprovar a App Store Connect. Ara Claude Code pot actuar en un navegador connectat a través de la seva integració amb Chrome, amb els accessos necessaris. Això no garanteix que els camps siguin correctes: revisa la informació, comprova els comptes utilitzats i valida tu mateix els compromisos i l'enviament a revisió.
Les subscripcions
Escriure un paywall són deu minuts. Fer que encaixin els productes d'App Store Connect, la seva configuració a RevenueCat i el codi és una altra història. Un identificador diferent per un sol caràcter i el paywall queda buit per al revisor. Les trampes més habituals estan recollides a els errors de paywall iOS dels principiants.
Els casos límit
Sense instruccions, Claude tracta el cas normal. Sense xarxa, una llista buida, una compra interrompuda: els has d'anomenar tu.
La seguretat de Supabase
Quan Claude crea taules a Supabase, comprova que la seguretat a nivell de fila (RLS) estigui activada, amb polítiques que limitin cada usuari a les seves pròpies dades. Comprova també que cap clau secreta acabi al codi de l'app. Escriu aquestes dues prohibicions al teu CLAUDE.md tan bon punt connectis una base de dades.
Pas 7: passar a TestFlight amb EAS
Les teves pantalles s'han comprovat a Expo Go o en una build de desenvolupament, segons els mòduls utilitzats. Ara passa a la build que es distribuirà als testers.
Preparar EAS
Ara necessites un compte d'Apple Developer de pagament: Expo ho recorda, és obligatori per enviar una app a l'App Store. Després, instal·la l'eina d'Expo i configura el projecte:
npm install --global eas-cli
eas login
eas build:configure
Afegeix un identificador de bundle únic a app.json, a ios.bundleIdentifier, per exemple com.yourname.myapp.
Compilar i enviar
eas build --platform ios --profile production
eas submit --platform ios
La primera ordre compila l'app als servidors d'Expo. La primera vegada, EAS et proposa connectar-se al teu compte d'Apple per crear els certificats. La segona envia la build a App Store Connect. També ho pots fer tot de cop amb eas build --platform ios --auto-submit.
Apple ha de processar la build abans que aparegui a TestFlight, i aquest processament la pot rebutjar, per exemple amb un ITMS-90717 per una icona transparent. Per tant, un enviament correcte no vol dir que ja es pugui instal·lar: comprova'n l'estat a App Store Connect. Els testers interns, externs i la revisió beta s'expliquen a la meva guia TestFlight per provar la teva app d'iPhone.
Torna a fer les comprovacions del pas 6 amb aquesta build. Una app que funciona a Expo Go encara pot petar en producció, per exemple quan falta un mòdul natiu.
Quant costa de veritat
Aquests són els preus que mostren els serveis, comprovats el 27 de setembre del 2026, en dòlars. L'import facturat també depèn de la teva regió, dels impostos i del teu ús: comprova l'oferta abans de subscriure-t'hi.
- Subscripció de Claude: l'oferta Pro costa 20 $ al mes, o 17 $ al mes amb pagament anual. Les ofertes Max comencen a 100 $ al mes, per a més ús.
- Compte d'Apple Developer: 99 $ l'any, obligatori per a TestFlight i l'App Store.
- EAS: l'oferta gratuïta d'Expo inclou 15 builds iOS al mes, en una cua de prioritat baixa. L'oferta Starter costa 19 $ al mes, més l'ús addicional.
Per a un prototip petit, Pro i l'oferta gratuïta d'EAS poden ser una base, si et mantens dins les seves quotes. Afegeix-hi el compte d'Apple abans de TestFlight i pressuposta a part els serveis que realment necessitis: base de dades, emmagatzematge o API de pagament. La plantilla de pressupost d'una primera app t'ajuda a desglossar aquestes partides. El temps de configuració i de comprovació també l'has de preveure.
Els límits sincers, i on ens encallem
Claude Code ha canviat qui pot crear una app d'iPhone. No ha canviat el que Apple exigeix per publicar-la. Un rebuig arriba de seguida: Solys en va rebre, Nolera i Clic també. Els motius més freqüents els explico a per què Apple rebutja una app.
Amb aquest tutorial pots arribar sol fins a TestFlight. On més sovint ens encallem és després: connectar les subscripcions, preparar el dossier per al revisor, entendre un rebuig. Per tenir una visió de conjunt del recorregut, llegeix la pàgina crear una aplicació d'iPhone.
Per a aquesta part, l'iOS Kit reuneix el codi de partida de les meves apps, subscripcions incloses, les skills de Claude Code de cada pas i l'Apple Review Kit. El recorregut complet és a la pàgina formació de Claude Code per crear una app iOS.
Ja t'has encallat i no saps per què? El diagnòstic gratuït et diu què t'està frenant de veritat i t'envia la meva checklist contra els rebutjos d'Apple.
Preguntes freqüents
Es pot crear una app d'iPhone amb Claude Code sense saber programar?
Sí per a les pantalles i la lògica senzilla, si revises i proves cada pas. No si esperes no entendre res de res. Has de saber llegir un missatge d'error, executar una ordre i comprovar què ha modificat Claude. S'aprèn ràpid construint.
Claude Code és gratuït?
No. Claude Code demana un compte Pro, Max, Team, Enterprise o Console. L'oferta gratuïta de claude.ai no l'inclou. L'oferta Pro permet començar, amb uns límits d'ús que cal vigilar.
Cal un Mac per crear una app iOS amb Claude Code?
No. Programes en qualsevol ordinador, proves a Expo Go al teu iPhone, i EAS compila i envia l'app als servidors d'Expo. Un Mac continua sent pràctic pel simulador, però no és obligatori.
Claude Code o Cursor per a una app React Native?
Faig servir tots dos, cada dia. Claude Code treballa al terminal i encadena sol canvis i tests. Cursor és un editor. El mètode compta més que l'eina: regles, una pantalla cada vegada, tests.
Quant de temps cal per publicar una primera app amb Claude Code?
Depèn de la mida de l'app i del teu temps. Una app amb una sola funció va molt més ràpid. La part més imprevisible continua sent la revisió d'Apple.
Claude Code pot configurar les subscripcions dins l'app?
Pot escriure el codi del paywall i de RevenueCat. Amb eines connectades i els permisos necessaris, també pot intervenir a les consoles. No dedueixis mai de la presència del codi que els productes estan configurats: comprova els identificadors, els preus i els drets després de la compra, i després prova la compra i la restauració a TestFlight. Els errors freqüents dels paywalls iOS et donen els punts que cal controlar.