Por que um app Expo precisa de uma camada de analytics antes de adicionar Amplitude
|18 min de leitura
Escrito por: Jonathan Reis em
Crie um contrato único de analytics para um app Expo, mantenha Firebase e GA4 funcionando, adicione Amplitude sem reescrever o código de produto e ganhe rollout independente, falha isolada e decisões melhores.
Como rodar o primeiro build iOS de um app Expo num monorepo pnpm
|14 min de leitura
Escrito por: Jonathan Reis em
O passo a passo de como fiz o primeiro build iOS de um app Expo (Sudoku) que já buildava no Android, num monorepo pnpm: prebuild, pod install, xcodebuild Release, simulador. Inclui as três armadilhas que travam o build (babel, Hermes prebuilt, Firebase mock) e como resolver cada uma nas fontes versionadas.
Como embutir Godot em um app React Native e medir o custo real
|17 min read
Escrito por: Jonathan Reis em
Uma POC Expo hospeda Godot em uma View nativa Android, corrige a ponte RN↔GDScript e troca milhares de nós por desenho batched; no iOS, o diagnóstico mostra por que build e bootstrap não provam renderização no Simulator.
Como desenhar um tabuleiro de Sudoku inteiro em um SkPicture (e por que o Canvas declarativo travava)
|9 min read
Escrito por: Jonathan Reis em
Por que o renderer Skia declarativo com 81 componentes React por célula sofria em dispositivos antigos, e como reimplementar o tabuleiro com Skia.PictureRecorder + <Picture> elimina o reconciler do caminho crítico de render.
Escolhendo alvos de layout mobile por logs reais, não por chute de device
|11 min read
Escrito por: Jonathan Reis em
Como usamos logs de user-agent no Loki, dados de uso por modelo de iPhone e estatísticas de resolução mobile para escolher fatores de tela práticos em um jogo React Native.
Rodando uma critique heurística de UX no meu próprio app — e corrigindo o que ela encontrou
|9 min read
Escrito por: Jonathan Reis em
Um desenvolvedor solo faz uma avaliação heurística baseada em Nielsen num jogo React Native publicado, prioriza os achados e mede a mudança de score após as correções. Processo prático para devs indie sem equipe de UX.
Versão, versionCode e config gerada: três números que o release Android precisa alinhar
|8 min de leitura
Escrito por: Jonathan Reis em
Depois de nove uploads na Play com versionName 0.1.0, lint sobrescrevendo config de produção e comandos de build com nomes ambíguos, documentamos a regra SemVer, os scripts dev/prd e o porquê de não regenerar config no lint.
Como validar eventos no Firebase DebugView em um APK release React Native
|9 min de leitura
Escrito por: Jonathan Reis em
Valide Firebase Analytics num APK React Native de produção combinando logs locais com a resposta realtime por trás do GA4 DebugView, mesmo quando o contador de dispositivos mostra zero.
AdMob UMP em React Native: mensagens de privacidade não são só painel
|9 min de leitura
Escrito por: Jonathan Reis em
Um checklist prático para AdMob UMP em um app Android Expo/React Native, cobrindo GDPR, regulamentos estaduais dos EUA, vínculo com a loja e o gate do SDK antes dos anúncios.
Seu confete em React Native renderiza atrás dos cards: ordem de irmãos, zIndex e elevation
|8 min de leitura
Escrito por: Jonathan Reis em
Um overlay de comemoração na tela de vitória caía atrás dos cards de resultado e descia rápido demais. A causa era a ordem de pintura entre irmãos no React Native, não um z-index faltando. Veja por que zIndex sozinho não basta no Android e como corrigimos os dois bugs.
Quando validação prestativa vira trapaça: as notas de Sudoku que vazavam a resposta
|7 min de leitura
Escrito por: Jonathan Reis em
Nosso Sudoku bloqueava anotações que conflitavam com a linha, coluna ou bloco. Parecia uma checagem de segurança. Na verdade era um solver de graça que dizia ao jogador quais números ainda eram possíveis. Veja o conserto e o princípio por trás dele.
Um TextInput escondido não captura teclado físico na New Architecture do React Native
|8 min de leitura
Escrito por: Jonathan Reis em
Queríamos teclado físico num jogo React Native no Android. O truque clássico do TextInput escondido falhou no Fabric porque o showSoftInputOnFocus é ignorado. O adb provou isso, e um config plugin resolveu de vez.
A borda arredondada que jogou todos os dígitos do Sudoku para o lado
|8 min de leitura
Escrito por: Jonathan Reis em
Uma borda num container overflow-hidden deslocou nosso tabuleiro Skia e descentralizou todos os dígitos. Veja como screenshots, e não o olho, acharam a causa real num jogo React Native.
Por que __DEV__ é false em build de release, e como passamos a gatear as dev tools por config
|7 min de leitura
Escrito por: Jonathan Reis em
Um atalho de desenvolvimento escondido atrás de __DEV__ sumiu exatamente quando precisávamos dele num build de release. Aqui está por que isso acontece no React Native e como movemos o gate para a config de runtime.
Design tokens como fonte única: dando a um app de Sudoku uma direção de arte de verdade
|8 min de leitura
Escrito por: Jonathan Reis em
Como demos a um Sudoku com cara de template uma direção de arte forte mexendo primeiro nos tokens de tema, compartilhando-os com o site e respeitando o orçamento de performance de um aparelho fraco.
Adicionando haptics do Expo a um jogo React Native sem tratar vibração como som
|8 min de leitura
Escrito por: Jonathan Reis em
Como o Daily Sudoku ganhou um toggle persistido de vibração, reaproveitou eventos de gameplay e manteve o bundle Web seguro usando expo-haptics no nativo.
Tocando os mesmos WAVs no Expo Web e no app React Native
|8 min de leitura
Escrito por: Jonathan Reis em
Como reduzimos a diferença entre Web e app em um jogo Expo/React Native ao trocar tons sintéticos por assets WAV empacotados e logs de áudio configuráveis.
Como manter E2E com Playwright útil quando React Native Skia renderiza canvas
|9 min de leitura
Escrito por: Jonathan Reis em
Uma nota de campo sobre testar um tabuleiro React Native Skia em canvas com Playwright, trocar seletores só de DOM por uma ponte estreita e deixar persistência determinística.
Medindo latência percebida em React Native quando métricas de frame não bastam
|7 min de leitura
Escrito por: Jonathan Reis em
Como medimos o tempo de resposta em React Native do handler do toque até estado e paint quando estatísticas de frame não explicavam o que o jogador sentia.
Quando um upgrade do Expo transforma sua splash screen em tela branca
|8 min de leitura
Escrito por: Jonathan Reis em
Uma nota prática sobre corrigir splash nativa quebrada depois de upgrade do Expo SDK, migrando do bloco legado de splash para o plugin expo-splash-screen.
Publicando um app Expo/React Native na Google Play com AAB local
|8 min de leitura
Escrito por: Jonathan Reis em
Como gerar um AAB local Expo/React Native para Google Play e ainda validar assinatura, Firebase, Sentry, AdMob, RevenueCat e entrega pela loja como release real.
Quando o versionCode muda, mas o JavaScript não: uma armadilha em builds React Native
|6 min de leitura
Escrito por: Jonathan Reis em
Um bug de release em que a Google Play instalou um versionCode Android novo enquanto o bundle JavaScript React Native ainda anunciava a release antiga no Sentry.