Entenda a arquitetura técnica e as decisões por trás da criação de um sistema customizado de over-the-air updates, substituindo o Expo Updates oficial no Nutrilow.
Contexto
Em um artigo anterior, compartilhei por que escolhi Expo + React Native + ExpressJS como base para o Nutrilow:
➡️ Por que adotei Expo, React Native e ExpressJS para a escalabilidade do Nutrilow
No momento, o foco era escalabilidade e autonomia técnica. Essa mentalidade continuou evoluindo — e o próximo passo natural foi assumir o controle sobre o sistema de OTA Updates.
O problema com o Expo Updates
O Expo oferece um excelente sistema de OTA, mas ele:
- Depende da infraestrutura da Expo;
- Não permite forçar reenvio de updates com o mesmo runtimeVersion;
- Não oferece logs detalhados de distribuição;
Esses pontos podia se tornar gargalos no processo de entrega contínua do Nutrilow.
A solução: Send OTA self-hosted
Decidi criar um serviço ExpressJS que atua como repositório e distribuidor de builds OTA.
Arquitetura simplificada
+--------------------------------------+
| expo export --public-url=... |
+----------------------+---------------+
|
v
+--------------------------------------+
| Express Server (OTA API) |
| - Recebe bundle e metadata |
| - Valida upload key |
| - Armazena e versiona build |
| - Retorna manifest para o app |
+--------------------------------------+
|
v
+--------------------------------------+
| Nutrilow App (Expo Updates client) |
| - Faz check automático de versão |
| - Faz download e aplica OTA |
+--------------------------------------+
Script de automação
Criei um script simples em Bash para publicar OTA updates com contexto do commit:
#!/bin/bash
commitHash=$(git rev-parse HEAD)
commitMessage=$(git log -1 --pretty=%B)
expo export --output ./dist
curl -F "bundle=@./dist/bundle.zip" \
-F "commit=$commitHash" \
-F "message=$commitMessage" \
-F "uploadKey=$UPLOAD_KEY" \
$OTA_SERVER_URL
Isso permite rodar ./deploy-ota.sh e publicar um update versionado automaticamente.
Resultados
✅ Deploys OTA automáticos e auditáveis
✅ Logs centralizados por commit
✅ Controle completo do ciclo de atualização
✅ Sem dependência da infraestrutura Expo
Próximos passos e referência cruzada
Essa implementação é detalhada de forma mais filosófica e experimental no post do Lab.BendevOficial, que inspirou este artigo:
👉 Leia: Por que criei meu próprio sistema de Send OTA Updates para o Nutrilow
Top comments (0)