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)
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)
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)
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)
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)