# Build, firma y distribución

> El final del pipeline por destino — build.gradle, firma y publicación en cada plataforma.

Source: https://crossfly.dev/es/docs/platforms/building-and-releasing — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Build, firma y distribución 🖥️🤖🍎🌐

El final del pipeline, por destino. Cada launcher tiene su `build.gradle`; la toolchain es **Java 17**.

## Tasks y artefactos por destino
| Destino | Build | `mainClassName` | Artefacto |
|---|---|---|---|
| 🖥️ Desktop | `gradlew :lwjgl3:run` (dev) / jar / instalador | `dev.crossfly.lwjgl3.Lwjgl3Launcher` | jar / instalador nativo |
| 🤖 Android | `gradlew :android:installDebug` / `assembleRelease` | `AndroidLauncher` | APK / **AAB** |
| 🍎 iOS | `gradlew :ios:launchIPhoneSimulator` / generar `.ipa` | `dev.crossfly.IOSLauncher` | **`.ipa`** |
| 🌐 Web | `gradlew :web:webBundle` (alias `dist`) | `dev.crossfly.web.WebLauncher` | bundle estático |

## Firma
| Destino | Firma |
|---|---|
| 🤖 Android | **keystore** → firma el `.aab`/APK release |
| 🍎 iOS | **certificado + provisioning profile** → firma el `.ipa` |
| 🖥️ Desktop | firma del instalador según el SO (opcional) |
| 🌐 Web | no hay firma — es contenido estático |

## Distribución
- **🤖 Android** → Google Play (AAB) o APK directo.
- **🍎 iOS** → App Store / **TestFlight** (vía Xcode/Transporter).
- **🖥️ Desktop** → instaladores nativos (jpackage/jlink) o jar ejecutable.
- **🌐 Web** → hospeda el contenido de `web/build/webapp/` en **cualquier servidor estático**.

## Checklist de release
- [ ] Probado en el desktop y en el destino real (ver [Pruebas](/docs/best-practices/testes)).
- [ ] Responsividad validada en pantallas/densidades (ver [Responsividad](/docs/best-practices/responsividade)).
- [ ] Permisos declarados (Android `Manifest` / iOS `Info.plist`).
- [ ] Recursos no disponibles por plataforma tratados (ver [Matriz](/docs/platforms/overview)).
- [ ] Firma configurada (keystore / provisioning).
- [ ] Iconos, *launch screen*, número de versión/build.
- [ ] Capturas de tienda generadas (`Main.getScreenShot(true).toPng(...)`).

## Prerrequisitos por destino
- **🖥️ Desktop:** JDK 17; en macOS, `-XstartOnFirstThread`.
- **🤖 Android:** Android SDK + build tools.
- **🍎 iOS:** **macOS + Xcode** + cuenta de desarrollador Apple.
- **🌐 Web:** servidor de archivos estáticos.

## Errores comunes
- Enviar iOS sin claves de uso en el `Info.plist` (rechazo).
- Publicar APK cuando la Play Store exige **AAB**.
- Hospedar el bundle web sin servir los `assets/`/`assets.txt` junto.

## Ver también
- [Desktop](/docs/platforms/desktop-lwjgl3) · [Android](/docs/platforms/android) · [iOS](/docs/platforms/ios) · [Web](/docs/platforms/web-teavm)
