# Submit a TestFlight — VeriX (iOS)

Guía completa, ya probada de punta a punta, para subir un build de VeriX a TestFlight y que un tester lo instale en su iPhone. Incluye el método de autenticación que **sí funciona** en esta cuenta de Apple Developer (Nexus 33 Group LLC) y por qué el método "estándar" (API Key) no sirve aquí.

> Requiere tener ya un build de iOS generado. Ver `BUILD.md` para eso (`scripts\build.ps1 -Env test -Platform ios`).

---

## ⚠️ Importante: usar Apple ID + App-Specific Password, NO API Key

La forma "recomendada" por Expo para `eas submit` es una **API Key de App Store Connect** (`.p8` + Key ID + Issuer ID). **En esta cuenta esa forma no funciona** — probamos 5 variantes distintas (key manual, `.bat` con variables de entorno, generación automática por EAS, servicio de credenciales cifrado `eas credentials`, y una segunda key nueva generada desde cero) y las 5 fallaron con el mismo error:

```
Error: Apple 403 detected - Access forbidden.
This request is forbidden for security reasons - The API key in use does not allow this request
× Failed to fetch App Store Connect API Key.
```

Se descartaron como causa: rol de la key (era Admin), tipo de key (Team Keys, que es el correcto), Términos y Condiciones (aceptados), membresía de Apple Developer (activa y pagada), y corrupción del archivo `.p8` (se confirmó que nunca se abrió/editó). El patrón (2 keys distintas, mismo error exacto) apunta a una restricción a nivel de cuenta que Apple no expone con un mensaje claro — posiblemente ligada a que la membresía de la organización se aprobó recientemente.

**La solución que sí funcionó:** autenticar con Apple ID + una **App-Specific Password**, en vez de una API Key. Es un mecanismo distinto dentro de `eas-cli` que no pasa por la llamada que estaba fallando.

---

## Paso 1 — Generar una App-Specific Password

Esto se hace en la cuenta personal de Apple, **no en App Store Connect** (son sitios distintos).

1. Ve a **https://appleid.apple.com** (no `appstoreconnect.apple.com`).
2. Inicia sesión con el Apple ID que tiene acceso al equipo Nexus 33 Group LLC (ej. `hectoregarciap@hotmail.com`).
3. Click en **Sign-In and Security**.
4. Busca la tarjeta **App-Specific Passwords** → click en ella.
5. Click en **+** para generar una nueva.
6. Ponle un nombre descriptivo, ej. `EAS Submit`.
7. Apple muestra la contraseña en formato `abcd-efgh-ijkl-mnop`. **Cópiala en ese momento** — Apple no la vuelve a mostrar después.

> Cada dev del equipo que vaya a hacer `eas submit` necesita generar la suya propia con su propio Apple ID (si tiene acceso al equipo).

---

## Paso 2 — Configurar `eas.json`

Agrega el `appleId` (esto no es secreto, se puede dejar en el repo) dentro del perfil de submit que uses:

```json
"submit": {
  "test": {
    "ios": {
      "appleId": "hectoregarciap@hotmail.com"
    }
  }
}
```

---

## Paso 3 — Setear la contraseña como variable de entorno (por sesión, no se guarda en ningún archivo)

En PowerShell, antes de correr el submit:

```powershell
$env:EXPO_APPLE_APP_SPECIFIC_PASSWORD = "abcd-efgh-ijkl-mnop"
```

No hay confirmación visual — es normal. Esta variable solo vive en esa ventana de terminal; se pierde al cerrarla (por diseño, para no dejarla en disco).

**Para no repetir esto cada sesión** (opcional, persiste solo en tu máquina, nunca en el repo):
```powershell
[System.Environment]::SetEnvironmentVariable("EXPO_APPLE_APP_SPECIFIC_PASSWORD", "abcd-efgh-ijkl-mnop", "User")
```
(abre una terminal nueva para que tome efecto)

---

## Paso 4 — Correr el submit

En la misma terminal donde seteaste la variable:

```powershell
npx eas-cli submit -p ios --profile test
```

Selecciona el build que quieres subir cuando te pregunte. Con la contraseña específica ya en el entorno, no debería pedirte ninguna API Key — autentica directo con el Apple ID.

Al terminar deberías ver:
```
√ Submitted your app to Apple App Store Connect!
Your binary has been successfully uploaded to App Store Connect!
```

Apple tarda **5-10 minutos** en procesar el build (a veces más). Llega un correo cuando termina.

---

## Paso 5 — Agregar testers en App Store Connect

1. Ve a **https://appstoreconnect.apple.com** → selecciona la app **VerixApp**.
2. Pestaña **TestFlight** → sección **iOS Builds**.
3. Una vez el build aparece con estado **"Ready to Submit"** o **"Ready to Test"**, entra al build (click en el número/ícono).
4. Si pide **Export Compliance** (uso de encriptación), respóndelo según corresponda a la app (la mayoría de apps que solo usan HTTPS estándar responden que no usan encriptación propia / usan solo la exenta).
5. Vuelve a **TestFlight** → **Internal Testing** → el grupo ya existente (ej. **"Team (Expo)"**, creado automáticamente por Expo).
6. Click en el grupo → pestaña **Testers** → **+** para agregar un email.

> **Requisito:** para poder agregar a alguien como tester interno, esa persona debe existir primero como usuario del equipo en **Users and Access → People**. Si su email no aparece, hay que invitarla ahí primero.

---

## Paso 6 — El tester instala VeriX

Desde el **iPhone** de la persona invitada:

1. Revisa el correo — llega una invitación de Apple/TestFlight con el nombre de la app y un código de 8 caracteres (ej. `BHHDZRWF`).
2. Instala la app **TestFlight** desde el App Store, si no la tiene.
3. Abre TestFlight → toca **Redeem**.
4. Escribe el código del correo.
5. VeriX aparece en la lista → toca **Install**.

> El código de canje es único por invitación/persona — cada tester tiene el suyo, no se puede compartir entre dos personas.

---

## Resumen rápido (una vez ya configurado todo)

```powershell
# 1. Generar build (ver BUILD.md)
.\scripts\build.ps1 -Env test -Platform ios

# 2. Setear la contraseña (si no está persistida ya)
$env:EXPO_APPLE_APP_SPECIFIC_PASSWORD = "abcd-efgh-ijkl-mnop"

# 3. Submit
npx eas-cli submit -p ios --profile test

# 4. Esperar correo de Apple (~5-10 min)

# 5. Agregar tester en App Store Connect (si es alguien nuevo)

# 6. El tester canjea el código en TestFlight desde su iPhone
```

---

## Ver también
- `BUILD.md` — cómo generar el build (`.ipa`) con versión y nombre automáticos.
- `distribucion-ios-eas.md` — alternativa de distribución ad hoc (sin pasar por TestFlight, instalación directa en dispositivos registrados).
- `distribucion-android-eas.md` — equivalente para Android.