Crear una app con Claude Code: tutorial para iPhone
Por Mehdi Azizi
Actualizado el , 15 min
Instala Claude Code, crea el proyecto Expo, escribe el CLAUDE.md, pide una pantalla a la vez y envía la app a TestFlight con EAS: el tutorial completo.
Crear una app con Claude Code: la respuesta corta
Para crear una app con Claude Code necesitas acceso de pago a Claude Code (una suscripción compatible o la Console con pago por uso), Node.js, un iPhone con Expo Go y un proyecto Expo. Escribes un archivo CLAUDE.md que describe tu stack y tus reglas, pides una pantalla a la vez, pruebas cada pantalla en tu iPhone y luego envías la app a TestFlight con EAS.
Este tutorial complementa mi guía crear una app iOS con IA, que explica lo que la IA hace bien y lo que falla. Aquí pasamos a la práctica: los comandos, los archivos, los prompts.
Programo mis apps iOS con Claude Code y Cursor todos los días. Mi stack: React Native, Expo, EAS, RevenueCat y Supabase. Solys, un despertador con minijuegos, y TradaZen, una app para entrenar trading, están publicadas en el App Store. Nolera y Clic fueron rechazadas por Apple y luego corregidas. Todo lo que sigue viene de ese trabajo.
Para ver este método aplicado a una app publicada, documenté el recorrido de TradaZen, del primer commit a los rechazos de Apple y los pivotes. Esa experiencia complementa los pasos del tutorial.
Paso 1: reunir los requisitos
Antes del primer comando, verifica que tienes todo esto.
Una cuenta de Claude de pago
Claude Code no está incluido en el plan gratuito de claude.ai. Según la documentación de Anthropic, necesitas una cuenta Pro, Max, Team, Enterprise o Console. El plan Pro permite empezar, dentro de sus límites de uso.
Node.js y una terminal
Expo requiere Node.js en versión LTS, en macOS, Windows o Linux. Claude Code funciona en macOS 13 o superior, Windows 10 o superior y las principales distribuciones de Linux.
Un iPhone y Expo Go
Instala Expo Go desde el App Store en tu iPhone para probar tus primeras pantallas sin compilar tu propia app. Antes de crear el proyecto, verifica la versión del SDK compatible con tu instalación en la página de Expo Go. El último SDK y la versión distribuida en el App Store no siempre están disponibles al mismo tiempo: Expo documentó, por ejemplo, ese desfase en mayo de 2026. Así que no partas de un número de versión sacado de un tutorial viejo. Para usar tus propios módulos nativos, planea una build de desarrollo.
¿Una Mac? No es obligatoria
Las builds de iOS se compilan en los servidores de Expo con EAS Build, con la versión de Xcode que elige tu SDK de Expo (ITMS-90725), y EAS Submit funciona en macOS, Linux y Windows. Así que puedes llegar hasta TestFlight desde una PC. La guía publicar una app iOS sin Mac detalla esa cadena.
Una cuenta de Apple Developer, más adelante
No la necesitas para programar y probar en el Expo Go del App Store. Se vuelve obligatoria al momento de enviar tu app a TestFlight. Volvemos a esto en el paso 7.
Paso 2: instalar Claude Code
En macOS, Linux o WSL, el método que recomienda Anthropic es el instalador nativo:
curl -fsSL https://claude.ai/install.sh | bash
En Windows, en PowerShell:
irm https://claude.ai/install.ps1 | iex
Luego verifica que la instalación funcionó:
claude --version
Si prefieres npm, el comando es npm install -g @anthropic-ai/claude-code. No le pongas sudo delante: la documentación lo desaconseja explícitamente.
La primera vez que ejecutas claude, se abre un navegador para conectarte a tu cuenta. Después escribes en tu idioma: Claude lee tus archivos, propone cambios y ejecuta comandos, con tu aprobación.
Paso 3: crear el proyecto Expo
Ubícate en la carpeta donde guardas tus proyectos y ejecuta:
npx create-expo-app@latest mi-app
cd mi-app
npx expo start
Si la herramienta te ofrece elegir entre la compatibilidad con el Expo Go del App Store y el último SDK, elige la compatibilidad para este ejercicio. En cualquier caso, verifica que la versión creada sea compatible con el Expo Go instalado en tu iPhone antes de continuar. Podrás preparar una build de desarrollo cuando tu proyecto la necesite.
Aparece un código QR en la terminal. Escanéalo con la cámara de tu iPhone: la app se abre en Expo Go. Un detalle suele bloquear la primera vez: Expo Go solo abre tu proyecto si Expo CLI y Expo Go están conectados a la misma cuenta de Expo. Ejecuta npx expo login en tu computadora e inicia sesión con la misma cuenta en la app.
¿Por qué Expo y no Swift? Claude conoce muy bien React Native, y pruebas sin Mac. Explico esta elección en la página React Native y Expo para una app móvil.
Ten en cuenta una limitación de Expo Go: solo contiene los módulos nativos que ya trae incluidos. En cuanto agregues una librería nativa que no conoce, las compras in-app por ejemplo, necesitarás una build de desarrollo. No es un problema para las primeras pantallas.
Elegir el entorno de prueba correcto
Expo Go, una build de desarrollo y TestFlight no demuestran lo mismo. Expo describe la build de desarrollo como tu propia app de prueba, con los módulos nativos que necesita tu proyecto.
| Lo que quieres verificar | Dónde probar | Límites de la prueba |
|---|---|---|
| Mostrar una primera pantalla y probar su navegación | Expo Go, con un SDK compatible | El comportamiento de módulos nativos ausentes en Expo Go |
| Usar una biblioteca nativa agregada al proyecto | Una build de desarrollo que incluya esa biblioteca | La versión distribuida y su aceptación por Apple |
| Recorrer la app destinada a los testers y luego probar compras | Una build enviada a TestFlight y productos configurados correctamente | Un pago real de un cliente o la validación de la puesta en venta |
Antes de agregar una dependencia, pregúntale a Claude: "¿Es compatible con mi SDK y mi entorno de prueba actual? ¿Hay que recompilar la app? Basa tu respuesta en la documentación". Así evitas pasar una noche corrigiendo un módulo que Expo Go simplemente no puede cargar, o un SDK rechazado al enviarlo por API no pública.
Paso 4: escribir el archivo CLAUDE.md del proyecto
Es el paso más rentable. Claude Code puede conservar una memoria del proyecto, pero tienes que explicitar sus reglas. El archivo CLAUDE.md, ubicado en la raíz del proyecto, aporta instrucciones comunes a todas las sesiones. Ahí escribes lo que Claude no puede adivinar.
En la carpeta del proyecto, ejecuta claude y luego escribe /init. Según la documentación, Claude analiza el proyecto y genera un primer CLAUDE.md con los comandos y las convenciones que encuentra. Después lo completas con tus reglas. Anthropic recomienda quedarse por debajo de 200 líneas: cuanto más largo es el archivo, menos se siguen las instrucciones.
Este es un ejemplo corto, parecido a lo que uso:
# Mi app
## Stack
- Expo (SDK de create-expo-app), React Native, TypeScript strict
- Navegación: Expo Router, un archivo por pantalla en app/
- Datos: Supabase (más adelante), nunca una clave secreta en la app
## Reglas
- Una pantalla a la vez. No toques archivos fuera de lo pedido.
- Ninguna altura fija en puntos: tamaños relativos a la pantalla,
ScrollView si el contenido puede desbordarse.
- Cada pantalla maneja 3 estados: carga, vacío, error.
- Textos de la interfaz en español con acentos.
- Antes de programar más de 2 archivos: propón un plan y espera mi aprobación.
## Comandos
- Iniciar: npx expo start
- Tests: usar el script que realmente existe en package.json.
Si todavía no existe, avisarlo; no anunciar tests exitosos.
- Tipos: npx tsc --noEmit
- Después de cada cambio: ejecutar los tests y los tipos, y luego decirme
qué cambió y cómo verificarlo en el iPhone.
La regla sobre las alturas fijas no está ahí por casualidad. Volvemos a ella en el paso 6.
Paso 5: escribir prompts de una pantalla a la vez
"Créame una app de seguimiento de hábitos con suscripción" produce un proyecto enorme, frágil, imposible de revisar. El método que funciona es el inverso: una petición, una pantalla, un resultado que puedes probar en cinco minutos.
Empieza con un plan
Para todo lo que afecte varios archivos, pasa al modo plan. Presiona Shift+Tab hasta ver plan mode on en la barra de estado. En este modo, Claude lee los archivos y propone un plan, pero no modifica nada antes de tu aprobación. Lo revisas, lo corriges y luego lo validas.
Un primer prompt para encuadrar el proyecto se ve así:
Quiero una app de seguimiento de hábitos. Versión 1: una sola función,
marcar los hábitos del día. Propón la lista de pantallas y la
estructura de carpetas. No programes nada por ahora.
Describe la pantalla, sus estados y sus límites
Después, un prompt por pantalla. Cuantos más casos límite nombres, menos los olvida Claude:
Crea la pantalla app/index.tsx que lista los hábitos del día.
- Cada fila: nombre del hábito, casilla de verificación, racha actual.
- Estado vacío: un texto y un botón "Agregar un hábito".
- Estado de carga y estado de error con un botón "Reintentar".
- Por ahora, los datos vienen de un arreglo local.
- Debe verse bien tanto en un iPhone SE como en el iPhone más grande:
sin altura fija, la lista se desplaza.
Ejecuta los tests y los tipos al final.
Corrige sin dejar que reescriba todo
Cuando un detalle no funciona, sé preciso y limita el alcance:
En mi iPhone, el botón "Agregar un hábito" queda debajo de la barra
inferior cuando la lista es larga. Corrige solo este problema en
app/index.tsx, sin tocar los demás archivos. Explica la causa.
También puedes pegar una captura de pantalla en la terminal: Claude la lee.
Ejercicio: un hábito que sigue marcado después de reiniciar
Este es un ejercicio didáctico para hacer en tu proyecto, no la captura de una funcionalidad ya entregada. El objetivo es pasar de una pantalla generada a un comportamiento verificable. No requiere cuenta de usuario ni compra integrada.
- Deja un solo hábito local llamado "Leer 10 minutos".
- Pide una casilla de verificación y un guardado local compatible con tu proyecto Expo.
- Pide al agente que indique los archivos modificados, la posible dependencia y los comandos realmente ejecutados.
- Instala o abre tu app en el iPhone y luego haz las verificaciones de abajo.
A partir de la pantalla existente, haz que el hábito "Leer 10 minutos"
se pueda marcar y conserve su estado después de cerrar y volver a abrir la app.
Usa el almacenamiento local compatible con las dependencias del proyecto.
No crees cuenta, ni servidor, ni suscripción, ni estadísticas adicionales.
Antes de programar, explica cómo manejarás la carga y un fallo
de lectura o de guardado. Luego haz un cambio limitado.
Al final: archivos cambiados, comandos ejecutados, límites no probados
y pasos exactos para verificar el resultado en el iPhone.
| Acción en tu iPhone | Resultado esperado | Si falla |
|---|---|---|
| Abrir la app por primera vez | El hábito y su casilla se ven, sin errores | Verificar el estado inicial y la carga del almacenamiento |
| Marcar, cerrar y volver a abrir la app | El hábito sigue marcado | Revisar la escritura y luego la lectura de la misma clave |
| Desmarcar y reiniciar | El hábito sigue desmarcado | Verificar que el valor false también se guarde |
| Repetir el recorrido en modo avión | La función local sigue disponible | Detectar una dependencia de red agregada sin motivo |
| Aumentar el tamaño del texto | El nombre y el control siguen accesibles | Quitar las restricciones que recortan u ocultan la acción |
No pidas "reescribe todo" si una fila falla. Describe la acción, el resultado esperado y el resultado observado. Por ejemplo: "Después de reiniciar, la casilla vuelve a quedar vacía aunque la había marcado. Explica la causa y corrige la persistencia sin modificar el diseño".
Descargar la plantilla CLAUDE.md y la hoja de verificación (.md). Ábrela en tu editor o en una app de notas. Adapta los comandos a tu proyecto antes de dársela al agente.
Paso 6: hacer revisar y probar
Claude Code escribe código que parece correcto. Solo tus tests y tu iPhone te dicen si lo es.
Tests para no romper lo que funciona
Cuanto más crece tu app, más riesgo hay de que cada petición rompa una pantalla ya validada. El proyecto creado por Expo no tiene tests: primero pídele a Claude que instale Jest con jest-expo, como recomienda la documentación de Expo. Luego pide tests para la lógica importante (el cálculo de una racha, la validación de un formulario) y haz que los ejecute después de cada cambio. Por eso los comandos de test están escritos en el CLAUDE.md: Claude los ejecuta sin que tengas que recordárselo. Con un archivo de reglas y tests, la IA rompe mucho menos lo que ya funcionaba.
Revisa cada cambio
No necesitas entender cada línea. Sí necesitas saber qué archivos cambiaron y por qué. Si Claude tocó un archivo que no tenía nada que ver, pregúntale el motivo antes de aceptar. Luego haz la pregunta: "¿qué puede romperse aquí?".
Verifica en un iPhone pequeño y en uno grande
Es la lección que más caro me costó. Solys fue rechazada por Apple por la regla 2.1: la demo del onboarding era imposible de ganar en un iPad Air, donde la app corría en modo de compatibilidad con iPhone. La causa: alturas programadas en puntos fijos, no relativas al tamaño de la pantalla. En mi iPhone todo estaba bien. El código había sido revisado, los tests estaban en verde. Ninguna herramienta había mirado la pantalla en otro tamaño.
Desde entonces, verifico cada pantalla como mínimo en el iPhone más pequeño y en el más grande. Si solo tienes un teléfono, el simulador de Xcode en Mac o un amigo con otro modelo te sirve. Fíjate sobre todo en los textos largos, el teclado abierto en los formularios y los botones fijos en la parte inferior.
Lo que Claude Code hace mal
Claude Code brilla en las pantallas y la lógica. Fuera de tu carpeta, es mucho menos confiable.
La firma y los certificados
Sin una conexión autorizada a tu cuenta de Apple, Claude no conoce su estado. Puede inventar un procedimiento de certificados que mezcla Xcode y Expo. Deja que EAS maneje la firma: la documentación de Expo explica que EAS CLI puede generar y guardar esos archivos por ti, después de conectarte a tu cuenta de Apple Developer.
App Store Connect
La ficha, las declaraciones de privacidad, las capturas y los enlaces legales son datos que hay que verificar en App Store Connect. Claude Code ahora puede actuar en un navegador con sesión iniciada mediante su integración con Chrome, con los accesos necesarios. Eso no garantiza que los campos sean correctos: revisa la información, verifica las cuentas usadas y valida tú mismo los compromisos y el envío a revisión.
Las suscripciones
Escribir un paywall toma diez minutos. Hacer coincidir los productos de App Store Connect, su configuración en RevenueCat y el código es otra historia. Un identificador con un carácter diferente y el paywall queda vacío para el reviewer. Las trampas más comunes están en los errores de paywall iOS de principiantes.
Los casos límite
Sin instrucciones, Claude trata el caso normal. Sin red, una lista vacía, una compra interrumpida: te toca a ti nombrarlos.
La seguridad de Supabase
Cuando Claude crea tablas en Supabase, verifica que la seguridad a nivel de filas (RLS) esté activada, con políticas que limiten a cada usuario a sus propios datos. Verifica también que ninguna clave secreta termine en el código de la app. Escribe estas dos prohibiciones en tu CLAUDE.md en cuanto conectes una base de datos.
Paso 7: pasar a TestFlight con EAS
Tus pantallas se verificaron en Expo Go o en una build de desarrollo, según los módulos usados. Ahora pasa a la build que se distribuirá a los testers.
Preparar EAS
Ahora necesitas una cuenta de Apple Developer de pago: Expo lo recuerda, es obligatoria para enviar una app al App Store. Luego instala la herramienta de Expo y configura el proyecto:
npm install --global eas-cli
eas login
eas build:configure
Agrega un identificador de bundle único en app.json, bajo ios.bundleIdentifier, por ejemplo com.tonnom.monapp.
Compilar y enviar
eas build --platform ios --profile production
eas submit --platform ios
El primer comando compila la app en los servidores de Expo. La primera vez, EAS te propone conectarse a tu cuenta de Apple para crear los certificados. El segundo envía la build a App Store Connect. También puedes hacer todo de una vez con eas build --platform ios --auto-submit.
Apple tiene que procesar la build antes de que aparezca en TestFlight, y ese procesamiento puede rechazarla, por ejemplo con ITMS-90717 por un ícono transparente. Un envío exitoso no significa que ya se pueda instalar: revisa su estado en App Store Connect. Los testers internos, externos y la revisión beta se explican en mi guía TestFlight para probar tu app de iPhone.
Repite las verificaciones del paso 6 con esta build. Una app que funciona en Expo Go todavía puede fallar en producción, por ejemplo cuando falta un módulo nativo.
Cuánto cuesta realmente
Estos son los precios publicados por los servicios y verificados el 27 de septiembre de 2026, en dólares. El monto cobrado también depende de tu región, los impuestos y tu uso: revisa el plan antes de suscribirte.
- Suscripción de Claude: el plan Pro cuesta 20 $ al mes, o 17 $ al mes con pago anual. Los planes Max empiezan en 100 $ al mes, para más uso.
- Cuenta de Apple Developer: 99 $ al año, obligatoria para TestFlight y el App Store.
- EAS: el plan gratuito de Expo incluye 15 builds de iOS al mes, en una cola de baja prioridad. El plan Starter cuesta 19 $ al mes, más el uso adicional.
Para un prototipo pequeño, Pro y el plan gratuito de EAS pueden ser una base, si te mantienes dentro de sus cuotas. Agrega la cuenta de Apple antes de TestFlight y luego calcula por separado los servicios realmente necesarios: base de datos, almacenamiento o una API de pago. La plantilla de presupuesto de una primera app ayuda a definir esos rubros. Tu tiempo de configuración y verificación también hay que preverlo.
Los límites honestos, y dónde te atoras
Claude Code cambió quién puede crear una app de iPhone. No cambió lo que Apple exige para publicarla. Un rechazo llega rápido: Solys los recibió, Nolera y Clic también. Los motivos más frecuentes los cuento en por qué Apple rechaza una app.
Con este tutorial puedes llegar solo hasta TestFlight. Donde más gente se atora es después: conectar las suscripciones, preparar el expediente para el reviewer, entender un rechazo. Para la vista general del recorrido, lee la página crear una aplicación para iPhone.
Para esa parte, el iOS Kit reúne el código base de mis apps, suscripciones incluidas, los skills de Claude Code para cada paso y el Apple Review Kit. El recorrido completo está en la página curso de Claude Code para crear una app iOS.
¿Ya estás atorado y no sabes en qué? El diagnóstico gratuito te dice qué te está frenando de verdad y te envía mi checklist antirrechazo de Apple.
Preguntas frecuentes
¿Se puede crear una app de iPhone con Claude Code sin saber programar?
Sí para las pantallas y la lógica sencilla, si revisas y pruebas cada paso. No si esperas no entender nada en absoluto. Tienes que saber leer un mensaje de error, ejecutar un comando y verificar lo que Claude modificó. Se aprende rápido construyendo.
¿Claude Code es gratis?
No. Claude Code requiere una cuenta Pro, Max, Team, Enterprise o Console. El plan gratuito de claude.ai no lo incluye. El plan Pro permite empezar, con límites de uso que hay que vigilar.
¿Se necesita una Mac para crear una app iOS con Claude Code?
No. Programas en cualquier computadora, pruebas en Expo Go en tu iPhone, y EAS compila y envía la app desde los servidores de Expo. Una Mac sigue siendo práctica para el simulador, pero no es obligatoria.
¿Claude Code o Cursor para una app de React Native?
Uso los dos, todos los días. Claude Code trabaja en la terminal y encadena solo cambios y tests. Cursor es un editor. El método importa más que la herramienta: reglas, una pantalla a la vez, tests.
¿Cuánto tiempo toma publicar una primera app con Claude Code?
Depende del tamaño de la app y de tu tiempo. Una app con una sola función avanza mucho más rápido. La parte más impredecible sigue siendo la revisión de Apple.
¿Claude Code puede configurar las suscripciones in-app?
Puede escribir el código del paywall y de RevenueCat. Con herramientas conectadas y los permisos necesarios, también puede intervenir en las consolas. Nunca deduzcas que los productos están configurados solo porque el código existe: verifica los identificadores, los precios y los derechos después de la compra, y luego prueba la compra y la restauración en TestFlight. Los errores frecuentes de los paywalls iOS te dan los puntos que debes revisar.