# Publicar en la nube con Codemagic (sin Mac)

Publica **iOS** y **Android** por la nube de Codemagic. Cada plataforma tiene su
propio workflow, así que puedes enviarlas por separado o las dos juntas.

Algunos pasos los hace la **CLI por ti**; otros son **manuales**, hechos una
vez en el panel de Codemagic o en el archivo `codemagic.yaml`. Cada título de
abajo dice cuál es cuál.

## Requisitos

- Cuenta [Codemagic](https://codemagic.io)
- Repositorio Git conectado a Codemagic
- iOS: cuenta Apple Developer + app en App Store Connect
- Android: app en Google Play Console + un keystore de firma

## 1. Agregar CI al proyecto — la CLI crea el archivo

```bash
kasy add ci
```

Crea `codemagic.yaml` en la raíz del proyecto (workflows `ios-workflow` y
`android-workflow`).

## 2. Configurar en el panel Codemagic — manual, una vez

Estos elementos son secretos y solo se hacen en el panel — una vez:

1. Abre [codemagic.io/apps](https://codemagic.io/apps) y **conecta el repositorio**.
2. **iOS** — *Integrations → App Store Connect*: conecta la clave de Apple. Su
   nombre va en `integrations: app_store_connect:` en `codemagic.yaml`.
3. **Android** — *Code signing identities → Android keystores*: sube el keystore
   con el **Reference name** `keystore_reference` (igual que en `codemagic.yaml`).
4. **Android** — sube el JSON de la **service account de Google Play** como
   variable secreta `GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS` (grupo `google_play`).

> Las **claves del app** (RevenueCat, backend, etc.) **no** hace falta cargarlas
> en el panel: `kasy codemagic release` las envía automáticamente desde tu `.env`.
> Si prefieres disparar desde el panel/push, agrégalas a los grupos de variables.

## 3. Ajustar 2 campos en `codemagic.yaml` — manual, una vez

El archivo ya marca estos puntos con un comentario `<-- Put your...`:

- **`publishing.app_store_connect.beta_groups`** (iOS) — cambia `kasy` por el
  nombre de un grupo de testers que crees en TestFlight (App Store Connect → tu
  app → TestFlight → Grupos). Sin esto el build se sube, pero nadie recibe invitación.
- **`publishing.email.recipients`** (iOS y Android) — pon tu correo, o borra la
  sección `email:` entera si no quieres notificaciones.

## 4. Configurar en la terminal — la CLI lo conduce, una vez

```bash
kasy codemagic configure
```

Solo pegas el token de la API cuando el asistente lo pida; el resto es
automático — abre la página del **API token** (Settings → Codemagic API),
valida el token y **lista tus apps** para elegir — sin escribir IDs. Guarda
todo en `.kasy/codemagic.env` (no versionado).

## 5. Disparar build — la CLI hace el resto

```bash
kasy codemagic release            # iOS + Android
kasy codemagic release --ios      # solo iOS
kasy codemagic release --android  # solo Android
```

El comando lee tu `.env` y lleva las claves de producción (incluida la clave de
producción de RevenueCat, `appl_`/`goog_`) junto al disparo. Un paso del
`codemagic.yaml` recrea el `.env` en la nube antes de compilar, así el build sale
con las claves correctas. Según `codemagic.yaml`, iOS va a TestFlight y Android al
track configurado (`internal` por defecto).

> **Android llega como borrador.** `codemagic.yaml` sube con
> `submit_as_draft: true` — el build llega al track interno, pero todavía
> necesitas abrir Play Console → Pruebas internas → Revisar versión → Iniciar
> el lanzamiento para liberarlo de verdad a los testers.

## Estado del build

```bash
kasy codemagic status <buildId>
```

## ¿Puedo usar el Mac y Codemagic a la vez?

Sí. Son dos caminos hacia la misma tienda; no entran en conflicto. El número de
build lo calcula la nube (último en la tienda + 1), por lo que rara vez choca.
Para el día a día, elige un camino principal.

## Mac local

Si tienes Mac: [ios-release.md](./ios-release.md) y `kasy ios release`.
