> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Crea una app de iOS con Devin

> Crear una app de iOS con Devin en una VM de macOS: compilación, pruebas y TestFlight

En este tutorial, Devin crea una pequeña app de seguimiento de hábitos con SwiftUI a partir de un repositorio vacío. Devin escribe el código, lo compila con Xcode, lo ejecuta en el simulador de iOS y abre un pull request. Tú lo ves trabajar, revisas el resultado y luego le pides que publique una compilación beta en TestFlight.

<Frame>
  <img src="https://mintcdn.com/cognitionai/1GViTZgEsjKKROrE/images/onboard-devin/macos-ios-app.gif?s=97a02d5b69dc53c55ce245b49d7e14af" alt="Devin creando un juego de iOS en una VM de macOS" width="1864" height="1080" data-path="images/onboard-devin/macos-ios-app.gif" />
</Frame>

<div id="before-you-start">
  ## Antes de empezar
</div>

* **VMs de macOS**: las sesiones de Devin deben ejecutarse en macOS. Si tienes un despliegue Dedicated SaaS, pide a tu account team que habilite las VMs de macOS. Consulta [Compatibilidad con macOS](/es/onboard-devin/environment/macos-support).
* **Un repositorio**: crea un repositorio vacío (por ejemplo, `habit-tracker`) y dale acceso a Devin mediante tu [integración con Git](/es/onboard-devin/environment#before-you-start).
* **Desktop mode**: activa **Enable desktop mode** en [Settings > Customization](https://app.devin.ai/customization) para que Devin pueda interactuar con el simulador y grabar sus pruebas. Consulta [Computer Use](/es/work-with-devin/computer-use).

<Info>
  Las sesiones de macOS consumen el mismo uso que las sesiones de Linux. No hay recargo por macOS.
</Info>

<div id="step-1-prompt-devin-to-build-the-app">
  ## Paso 1: Pide a Devin que compile la app
</div>

Inicia una nueva sesión en el repositorio que elijas y elige **macOS** en el menú de plataformas que aparece debajo del cuadro de prompt. Xcode, el iOS Simulator y Homebrew vienen preinstalados, así que no hay nada que configurar de antemano.

<Note>
  En Slack, agrega el [bang command](/es/integrations/slack) `!mac` a tu mensaje. A través de la [API](/es/api-reference/overview), define `platform: "macos"` al crear una sesión.
</Note>

Dale a Devin un prompt específico que cubra las funcionalidades de la app, las herramientas y cómo demostrar que funciona. Aquí tienes un ejemplo:

```text theme={null}
Crea una app de iOS en SwiftUI llamada HabitTracker en este repositorio.

Requisitos:
- Apunta a iOS 17+. Usa SwiftUI y el framework Observation.
- Pantalla principal: una lista de hábitos, cada uno con un nombre, un icono
  de SF Symbol y un botón de marca de verificación que marca el hábito
  como completado hoy.
- Muestra la racha actual (días consecutivos completados) junto a cada hábito.
- Un botón "+" en la barra de herramientas abre una hoja para agregar un
  hábito. Desliza para eliminar.
- Mantén los hábitos en memoria por ahora. Aún sin persistencia.

Configuración del proyecto:
- Instala xcodegen, swiftlint y xcbeautify con Homebrew.
- Define el proyecto en project.yml con XcodeGen. Confirma project.yml
  y agrega el .xcodeproj generado a .gitignore.
- Agrega un target de pruebas unitarias con pruebas XCTest para el cálculo
  de la racha.
- Asegúrate de que swiftlint pase sin errores.

Verificación:
- Compila y ejecuta las pruebas en el simulador de iPhone 17.
- Instala e inicia la app en el Simulador. Agrega dos hábitos, marca uno
  como completado y elimina otro. Graba el proceso y envíame una captura
  de la pantalla principal.
- Abre un PR con un resumen breve y la captura de pantalla.
```

Un buen prompt para iOS:

* **Indica la versión de la plataforma y los frameworks**, para que Devin no tenga que adivinar el destino de despliegue ni la arquitectura.
* **Indica el dispositivo del simulador**, para que los comandos de compilación usen un destino que exista en la VM.
* **Describe un flujo de verificación concreto**, para que Devin pruebe el comportamiento que te interesa y no se limite a comprobar que compila.

<div id="step-2-watch-devin-build-and-test">
  ## Paso 2: Observa a Devin compilar y probar
</div>

Devin aborda la tarea de forma muy similar a como lo haría un desarrollador de iOS:

1. **Genera la estructura del proyecto**: escribe `project.yml`, las vistas de SwiftUI, el modelo de hábitos y el target de pruebas, y luego ejecuta `xcodegen generate`.

2. **Compila y corrige errores**: ejecuta `xcodebuild` desde su shell, lee la salida del compilador y corrige los errores hasta que la compilación y las pruebas pasen.

3. **Ejecuta la app en el Simulator**: arranca el dispositivo e instala y lanza la compilación:

   ```bash theme={null}
   xcrun simctl boot "iPhone 17"
   xcrun simctl install booted <path-to-HabitTracker.app>
   xcrun simctl launch booted <bundle-id>
   ```

4. **Prueba el flujo que describiste**: navega por la app con [Computer Use](/es/work-with-devin/computer-use), comprueba el resultado en pantalla y [graba](/es/work-with-devin/testing-and-recordings) la ejecución.

5. **Abre un pull request** con el resumen y la captura de pantalla.

Abre la pestaña **iOS Simulator** en el workspace de la sesión para ver en directo el simulador arrancado mientras Devin navega por la app.

<Tip>
  Si la compilación no encuentra un destino, pídele a Devin que ejecute `xcrun simctl list devices available` y use un dispositivo y un sistema operativo que la VM realmente tenga.
</Tip>

<div id="step-3-review-and-iterate">
  ## Paso 3: Revisar e iterar
</div>

Revisa el pull request como lo harías con cualquier otro. Verifica que la captura de pantalla y la grabación coincidan con lo que pediste. Luego continúa desarrollando en la misma sesión con prompts de seguimiento:

```text theme={null}
Persiste los hábitos y el historial de completado con SwiftData para que
sobrevivan a los reinicios de la app. Agrega una prueba que inserte un hábito
en un contenedor de modelo en memoria y verifique la racha. Vuelve a abrir la
app en el Simulador para confirmar que los hábitos persisten y luego haz push
al mismo PR.
```

```text theme={null}
Agrega un target de pruebas de UI con un XCUITest que agregue un hábito, lo marque como
completado y verifique que la racha muestre 1. Ejecútalo en el simulador de iPhone 17.
```

```text theme={null}
Añade compatibilidad con el modo oscuro y Dynamic Type. Revisa la pantalla
principal en el Simulador con apariencia oscura y con el tamaño de texto de
accesibilidad más grande, y envía capturas de pantalla de ambos casos.
```

También puedes dejar comentarios de revisión en el pull request, y Devin responde a ellos mientras la sesión está activa. Consulta [integración con GitHub](/es/integrations/gh) y [Devin Review](/es/work-with-devin/devin-review).

<div id="step-4-ship-a-beta-to-testflight">
  ## Paso 4: Publicar una beta en TestFlight
</div>

Una vez que la app funcione en el Simulador, Devin puede archivarla, firmarla y subir la compilación a TestFlight para que los testers puedan instalarla en dispositivos reales.

Esto requiere una configuración inicial única que debes hacer tú mismo. [Subir compilaciones de iOS a TestFlight](/es/onboard-devin/environment/testflight) explica cada paso:

1. **Configura App Store Connect**: acepta los acuerdos, registra el bundle ID, crea el registro de la app, crea un grupo beta y responde el cuestionario de cumplimiento de exportación.
2. **Crea una clave de API de App Store Connect** y descarga su archivo `.p8`.
3. **Agrega los secretos de Devin**: `ASC_KEY_ID`, `ASC_ISSUER_ID`, `ASC_PRIVATE_KEY` y `APPLE_TEAM_ID`.
4. **Permite el acceso de red** a los servidores de Apple si tu organización usa una política de red restringida.

<Note>
  Usa el mismo bundle ID en `project.yml` y en App Store Connect. Si Devin eligió un bundle ID provisional en el Paso 1, pídele que actualice el proyecto primero.
</Note>

Después, inicia una nueva sesión para que los secretos estén disponibles e indícale a Devin:

```text theme={null}
Archiva el esquema HabitTracker y súbelo a TestFlight. Usa un número de
compilación mayor que el de la última compilación en App Store Connect, agrega
la compilación al grupo beta "QA" y envíame el número cuando esté listo.
```

Devin escribe la clave de API en disco, archiva la app con `xcodebuild archive` y la sube con `xcodebuild -exportArchive`. Luego agrega la compilación procesada al grupo beta. Para reutilizar estos pasos sin repetirlos en cada prompt, agrega una entrada `testflight` a la sección `knowledge` del blueprint. Consulta [Guardar los pasos en tu blueprint](/es/onboard-devin/environment/testflight#save-the-steps-in-your-blueprint).

<div id="tips">
  ## Consejos
</div>

* **Fija la cadena de herramientas**: las imágenes de macOS incluyen más de una versión de Xcode. Usa `DEVELOPER_DIR` o `xcode-select` en el blueprint para elegir una. Consulta [Selección de una versión de Xcode](/es/onboard-devin/environment/macos-support#selecting-an-xcode-version).
* **Guarda las credenciales como secretos**: las claves de API de App Store Connect, los certificados de firma y los tokens de registros de paquetes privados deben ir en [Secretos](/es/product-guides/secrets). Devin los lee como variables de entorno.
* **Permite los registros de paquetes**: si tu organización usa una política de red restringida, asegúrate de que la lista de permitidos de macOS incluya Swift Package Manager, CocoaPods o cualquier registro privado que use tu app. Consulta [Acceso a la red](/es/onboard-devin/environment/macos-support#network-access).
* **Reinicia el Simulador tras despertar la sesión**: cuando una sesión duerme y despierta, los archivos se conservan, pero los procesos en ejecución no. Pídele a Devin que vuelva a arrancar el Simulador antes de hacer pruebas.
* **Pide evidencia**: solicita capturas de pantalla o una grabación de pantallas concretas para revisar la UI sin tener que ejecutar la app tú mismo.

<div id="limitations">
  ## Limitaciones
</div>

* Devin ejecuta apps en simuladores, no en iPhones o iPads físicos. Para probar en un dispositivo, instala una compilación de [TestFlight](#step-4-ship-a-beta-to-testflight).
* Los resultados de tiempos y de profiling dentro de una VM no reflejan el rendimiento real de un dispositivo.
* Los contenedores se ejecutan mediante emulación por software en las VM de macOS, por lo que el trabajo intensivo en contenedores es lento.

Consulta las [limitaciones de la compatibilidad con macOS](/es/onboard-devin/environment/macos-support#limitations) para más detalles.

<div id="next-steps">
  ## Próximos pasos
</div>

<CardGroup cols={2}>
  <Card title="Subidas a TestFlight" icon="paper-plane" href="/es/onboard-devin/environment/testflight">
    Configuración de App Store Connect, claves de API y secretos para subir compilaciones
  </Card>

  <Card title="Compatibilidad con macOS" icon="apple" href="/es/onboard-devin/environment/macos-support">
    Opciones de blueprint, herramientas preinstaladas y resolución de problemas en sesiones de macOS
  </Card>

  <Card title="Pruebas y grabaciones" icon="video" href="/es/work-with-devin/testing-and-recordings">
    Cómo Devin prueba tu app y registra los resultados
  </Card>
</CardGroup>
