# Específicos por plataforma

> "Funciona no desktop, quebra no celular" — status bar, teclado, permissões, BLE stub, densidade.

Source: https://crossfly.dev/pt/docs/troubleshooting/platform-specific — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Específicos por plataforma

Comportamento que só quebra num alvo. Formato: **sintoma → causa → correção**.

## Android: conteúdo sob a status bar
**Causa:** deslocamento `difY` / altura da status bar não aplicado.
**Correção:** respeite `DeviceConfig.statusbarHeight` no layout do topo.
([Android](/docs/platforms/android))

## Teclado virtual cobre o campo focado
**Causa:** o campo não é reposicionado quando o teclado sobe.
**Correção:** ajuste dependente de `Device.keyboardShift`/`keyboardHeight`.
(Cap. 6 — Eventos e Entrada)

## iOS: build falha (RoboVM)
**Causa:** toolchain/assinatura (macOS+Xcode, provisioning).
**Correção:** confira o launcher iOS e o certificado/provisioning. ([iOS](/docs/platforms/ios))

## Permissões de dispositivo negadas (câmera/GPS/armazenamento)
**Causa:** permissão não concedida / não declarada.
**Correção:** cheque `DeviceConfig.cameraAllowed`/`storageAllowed` e declare no
`AndroidManifest.xml`/`Info.plist`; peça em runtime **antes** de subir a UI (início atrasado no Android).
(Cap. 24)

## Bluetooth "não faz nada"
**Causa:** no **core**, partes do BLE são **esqueleto sobre cache** — o rádio real vive nos launchers de
plataforma.
**Correção:** teste em **dispositivo real**; confirme a implementação da plataforma alvo.
([Bluetooth BLE](/docs/data-and-services/device-bluetooth-ble))

## `FilePicker` / `IWebView` sem efeito (ou `WebContainer` no web)
**Causa:** esqueletos/sem implementação concreta em alguns alvos; no **web** `createWebView()` retorna
`null`.
**Correção:** cheque `!= null`/`Device.platform` e use alternativa (arquivos em `Device.homeFolder`;
`PlatformUtils.instance.view(url)` no web). ([Integração nativa](/docs/platforms/native-integration))

## Cores/render divergem entre plataformas
**Causa:** normalmente `Screen.scale`/densidade.
**Correção:** use **pixels lógicos** e `Relative`, nunca `Gdx.graphics` como referência de tamanho.
([Responsividade](/docs/best-practices/responsividade))

## Veja também
- [Build e Gradle](/docs/troubleshooting/build-gradle) · [Matriz de plataformas](/docs/platforms/overview)
