# Build, assinatura e distribuição

> O fim do pipeline por alvo — build.gradle, assinatura e publicação em cada plataforma.

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

# Build, assinatura e distribuição 🖥️🤖🍎🌐

O fim do pipeline, por alvo. Cada launcher tem seu `build.gradle`; a toolchain é **Java 17**.

## Tasks e artefatos por alvo
| Alvo | Build | `mainClassName` | Artefato |
|---|---|---|---|
| 🖥️ 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` / gerar `.ipa` | `dev.crossfly.IOSLauncher` | **`.ipa`** |
| 🌐 Web | `gradlew :web:webBundle` (alias `dist`) | `dev.crossfly.web.WebLauncher` | bundle estático |

## Assinatura
| Alvo | Assinatura |
|---|---|
| 🤖 Android | **keystore** → assina o `.aab`/APK release |
| 🍎 iOS | **certificado + provisioning profile** → assina o `.ipa` |
| 🖥️ Desktop | assinatura do instalador conforme o SO (opcional) |
| 🌐 Web | não há assinatura — é conteúdo estático |

## Distribuição
- **🤖 Android** → Google Play (AAB) ou APK direto.
- **🍎 iOS** → App Store / **TestFlight** (via Xcode/Transporter).
- **🖥️ Desktop** → instaladores nativos (jpackage/jlink) ou jar executável.
- **🌐 Web** → hospede o conteúdo de `web/build/webapp/` em **qualquer servidor estático**.

## Checklist de release
- [ ] Testado no desktop e no alvo real (ver [Testes](/docs/best-practices/testes)).
- [ ] Responsividade validada em telas/densidades (ver [Responsividade](/docs/best-practices/responsividade)).
- [ ] Permissões declaradas (Android `Manifest` / iOS `Info.plist`).
- [ ] Recursos indisponíveis por plataforma tratados (ver [Matriz](/docs/platforms/overview)).
- [ ] Assinatura configurada (keystore / provisioning).
- [ ] Ícones, *launch screen*, versão/build number.
- [ ] Screenshots de loja gerados (`Main.getScreenShot(true).toPng(...)`).

## Pré-requisitos por alvo
- **🖥️ Desktop:** JDK 17; no macOS, `-XstartOnFirstThread`.
- **🤖 Android:** Android SDK + build tools.
- **🍎 iOS:** **macOS + Xcode** + conta de desenvolvedor Apple.
- **🌐 Web:** servidor de arquivos estáticos.

## Erros comuns
- Submeter iOS sem chaves de uso no `Info.plist` (rejeição).
- Publicar APK quando a Play Store exige **AAB**.
- Hospedar o bundle web sem servir os `assets/`/`assets.txt` junto.

## Veja também
- [Desktop](/docs/platforms/desktop-lwjgl3) · [Android](/docs/platforms/android) · [iOS](/docs/platforms/ios) · [Web](/docs/platforms/web-teavm)
