12 KiB
Plano de Ação - Skip para Android
Objetivo
Preparar o projeto PediFoods para o primeiro ciclo real de testes no Android, preservando integralmente o funcionamento atual do iOS.
Regra principal deste plano:
- Todo ajuste necessário para Android deve ser isolado e não pode causar regressão no iOS.
- Sempre que possível, a separação deve ser feita com condicionais por plataforma, abstrações compatíveis ou implementações específicas para Android.
- Cada task concluída e validada deve gerar commit próprio.
Premissas confirmadas
- O projeto já possui base Skip dual-platform.
- O iOS está funcional e deve ser preservado como referência de comportamento.
- O Android já possui estrutura inicial pronta:
pedi-foods/Android/*pedi-foods/Android/app/src/main/kotlin/Main.ktpedi-foods/Android/app/src/main/AndroidManifest.xmlpedi-foods/Sources/PediFoods/Skip/skip.yml
- O objetivo imediato não é publicar Android, e sim conseguir compilar, instalar, abrir e validar os fluxos principais.
Diagnóstico atual
1. Estrutura Android existente
O projeto já possui:
- Manifest com permissões de internet e localização.
Main.ktcom tratamento inicial de permissão de localização no Android.- Script dedicado para exportar e rodar no Android:
pedi-foods/scripts/android-run.sh
- Recursos Android básicos como ícones launcher.
2. Riscos identificados
Os principais riscos para o primeiro teste Android são:
- Imports e dependências iOS-only ainda expostos em arquivos compartilhados.
- Build local atualmente bloqueado por problema de artefato/toolchain Skip.
- Recursos e comportamentos com paridade incompleta no Android.
- Cobertura de testes ainda insuficiente para confiar só em automação.
3. Bloqueios técnicos já identificados
3.1. Código compartilhado com dependência iOS-only
Foram encontrados pontos com alto risco para Android:
pedi-foods/Sources/PediFoods/Views/Main/StoreDetailView.swift- possui
import LCEssentialssem blindagem de plataforma.
- possui
pedi-foods/Sources/PediFoods/Views/Main/ProfileView.swift- possui
import LCEssentialssem blindagem de plataforma.
- possui
- Outros arquivos com dependências iOS-only exigem revisão cuidadosa:
pedi-foods/Sources/PediFoods/Views/Main/HomeView.swiftpedi-foods/Sources/PediFoods/Views/Main/ReviewsView.swiftpedi-foods/Sources/PediFoods/Views/Main/UserProfileView.swiftpedi-foods/Sources/PediFoods/Services/ApiClient.swift
3.2. Ambiente/build Skip inconsistente
Na validação local, o comando de build falhou antes da compilação funcional:
swift buildretornou erro de artefato ausente do Skip.- O erro aponta para caminho antigo de projeto, indicando problema de cache, artefato ou configuração local do ambiente.
Sem resolver isso, não é possível validar corretamente o Android.
3.3. Paridade Android ainda parcial
Alguns comportamentos parecem estar deliberadamente simplificados para Android:
- Snackbar no Android está atualmente neutro/stubado.
- Splash nativo Android ainda não aparenta estar finalizado.
- Recursos visuais e alguns fluxos podem abrir, mas não com equivalência total ao iOS.
Isso não impede o primeiro boot, mas entra como ajuste após a compilação inicial.
Estratégia de execução
A execução deve seguir uma ordem rígida para evitar retrabalho:
- Primeiro remover bloqueios de compilação cross-platform.
- Depois estabilizar o ambiente Skip/Android local.
- Em seguida gerar build Android real.
- Depois validar execução no device/emulador.
- Só então ajustar bugs e diferenças de comportamento específicas do Android.
- Ao fim de cada etapa funcional concluída, gerar commit.
Plano de ação detalhado
Fase 1 - Blindagem do código compartilhado para Android
Objetivo: Garantir que o código compartilhado consiga ser compilado para Android sem quebrar o iOS.
Ações:
- Revisar todos os arquivos compartilhados com:
import LCEssentialsimport UIKitimport PhotosUI- qualquer API não portável pelo Skip
- Encapsular uso iOS-only com:
#if os(iOS)#if canImport(...)- abstrações seguras por plataforma
- Confirmar que nenhum ajuste Android altere o comportamento já funcional do iOS.
- Validar se os fallbacks Android são suficientes para compilar.
Critério de conclusão:
- O código compartilhado deixa de possuir bloqueios óbvios de compilação Android.
- As dependências iOS-only ficam totalmente isoladas.
Commit ao concluir:
- Criar commit específico da blindagem cross-platform.
Fase 2 - Saneamento do ambiente Skip/Android
Objetivo: Restabelecer o pipeline de build para que a validação Android seja real e repetível.
Ações:
- Identificar a origem do erro de artefato do Skip.
- Verificar caches, artefatos e referências para caminho antigo do projeto.
- Corrigir ambiente local sem destruir configuração válida do iOS.
- Validar novamente:
swift build- fluxo de export Android via Skip
Critério de conclusão:
- O build compartilhado executa sem erro de artefato.
- O projeto consegue iniciar a etapa de export Android.
Commit ao concluir:
- Criar commit específico do ajuste de ambiente/configuração, se houver mudança versionada no repositório.
- Se a correção for apenas local e não versionável, registrar isso no andamento e seguir sem commit desta subparte.
Fase 3 - Primeiro build Android real
Objetivo: Gerar APK/build Android funcional para teste.
Ações:
- Rodar export/build Android pelo fluxo oficial do projeto.
- Validar geração dos artefatos Android esperados.
- Confirmar compatibilidade com ABI do emulador/device.
- Corrigir falhas de build especificamente Android sem alterar o caminho iOS.
Critério de conclusão:
- APK ou build instalável gerado com sucesso.
- Nenhum erro de compilação Android pendente.
Commit ao concluir:
- Criar commit específico do primeiro build Android estabilizado.
Fase 4 - Primeiro teste funcional no Android
Objetivo: Instalar, abrir e validar o app no Android pela primeira vez.
Ações:
- Instalar no emulador ou device.
- Validar abertura do app.
- Confirmar:
- splash inicial
- fluxo de login
- navegação principal por tabs
- home
- detalhe da loja
- perfil
- endereços
- Observar crashes, telas em branco, problemas de navegação ou layout quebrado.
Critério de conclusão:
- O app abre no Android.
- Os fluxos principais navegam sem crash.
Commit ao concluir:
- Criar commit específico do primeiro ciclo funcional de execução Android.
Fase 5 - Correções de runtime específicas do Android
Objetivo: Ajustar o que só aparece após o app abrir no Android.
Ações:
- Validar permissão de localização.
- Validar persistência/local cache usados pelo app no Android.
- Validar imagens e carregamento remoto.
- Validar teclado, foco e
adjustResize. - Validar sheets, modais, overlays e navegação.
- Corrigir bugs Android-only com isolamento por plataforma.
Critério de conclusão:
- Os fluxos principais deixam de ter falhas críticas no Android.
- Nenhuma correção Android impacta o iOS.
Commit ao concluir:
- Criar commits separados por grupo funcional concluído e validado.
Fase 6 - Paridade mínima de UX Android
Objetivo: Atingir um nível mínimo aceitável de experiência para teste Android sem buscar perfeição visual prematura.
Ações:
- Ajustar snackbar Android para comportamento visível e funcional.
- Revisar splash Android nativo, se necessário.
- Corrigir diferenças de layout mais críticas.
- Revisar componentes com comportamento visual diferente entre plataformas.
Critério de conclusão:
- O Android fica funcional e utilizável para teste contínuo.
- As diferenças visuais restantes não impedem validação do produto.
Commit ao concluir:
- Criar commit específico das melhorias de UX Android aprovadas.
Fase 7 - Regressão rápida no iOS
Objetivo: Garantir que os ajustes Android não introduziram regressões no iOS.
Ações:
- Rodar build iOS novamente.
- Validar navegação principal no iOS.
- Confirmar que os fluxos já funcionais continuam intactos.
- Revisar especialmente os pontos alterados com condicionais de plataforma.
Critério de conclusão:
- iOS continua funcional após os ajustes Android.
- Nenhuma regressão relevante é detectada.
Commit ao concluir:
- Criar commit final de consolidação apenas se houver mudanças adicionais nesta etapa.
Regras operacionais durante a execução
- Nenhum arquivo pode ultrapassar 500 linhas.
- Ajustes Android devem ser isolados e não devem reescrever a lógica funcional do iOS.
- Toda correção deve passar por validação antes de seguir para a próxima task.
- Cada task funcional concluída deve resultar em commit.
- Se uma task encontrar erro, ela retorna ao ciclo:
- identificar causa raiz
- corrigir
- testar novamente
- só então marcar como concluída
Convenção de commits
Padrão recomendado:
fix(android): isolate ios-only dependencies for skip buildfix(build): stabilize skip android export pipelinefeat(android): first successful android buildfix(android): resolve runtime issues on first bootfeat(android): improve minimum ux parity
Sequência de tasks para acompanhamento
Legenda:
- 🔴 Pendente
- 🟢 Concluído
- 🟢 Revisar e blindar imports/dependências iOS-only no código compartilhado.
- 🟢 Corrigir o problema de artefato/caminho do ambiente Skip local.
- 🟢 Validar
swift buildsem erro de ambiente. - 🟢 Validar export/build Android via Skip.
- 🟢 Gerar APK/build Android instalável.
- 🔴 Instalar e abrir o app no Android.
- 🔴 Validar login no Android.
- 🔴 Validar home e navegação principal no Android.
- 🔴 Validar detalhe de loja e carrinho no Android.
- 🔴 Validar perfil e endereços no Android.
- 🔴 Validar permissão e uso de localização no Android.
- 🔴 Corrigir bugs críticos de runtime Android.
- 🟢 Ajustar snackbar Android.
- 🔴 Revisar splash Android, se necessário.
- 🔴 Rodar regressão rápida no iOS após os ajustes Android.
- 🟢 Criar commit após cada task concluída e funcional.
Andamento
- Task 1 concluída e validada via build compartilhado.
- Task 2 concluída com ajuste local no cache/estado de build do Skip.
- Correção local não versionada.
- Task 3 concluída com
swift buildfinalizado com sucesso. - Task 4 concluída com
skip export --debug --no-ios --android --arch aarch64 --plain --verbose.- O
skip exportfechou com sucesso completo. - O pipeline passou pela recompilação Swift compartilhada, geração Android Skip,
assembleDebug,bundleDebuge export final. - Artefatos gerados com sucesso em
pedi-foods/.build/skip-export/: PediFoods-debug.apkPediFoods-debug.aabPediFoods-project.zip
- O
- Task 5 concluída com geração validada de artefatos Android instaláveis.
- APK exportado com sucesso.
- AAB exportado com sucesso.
- Task 13 concluída com implementação funcional de snackbar no Android.
SnackbarCenterAndroid deixou de ser stub e agora controla exibição, timeout e tap action.SnackbarOverlayAndroid passou a renderizar o banner visual e reagir a mudanças de estado.swift buildvalidado com sucesso após a alteração.- A validação
skip exportdesta rodada ficou bloqueada por erro pré-existente emVendor/skip-fuse-ui(onGeometryChangeErased) e em código geradoSkipUI, sem relação direta com a task de snackbar.
- Ajuste incremental de paridade no perfil Android concluído.
UserProfileView+Androidagora mostra preview de avatar quandoprofilePictureestá preenchido.- Campo de edição de foto por URL/Base64 adicionado apenas no Android.
swift buildvalidado com sucesso após o ajuste.
- Padronização de clipboard cross-platform concluída para fluxos OTP/PIX.
- Helper de clipboard centralizado em
PlatformCompat. OtpVieweCheckoutViewpassaram a usar o helper compartilhado.swift buildvalidado com sucesso após o ajuste.
- Helper de clipboard centralizado em
- Ajuste de atualização de localização Android concluído em
Main.kt.- Atualização/permissão de localização acionada também no
onResume. - Removido uso de non-null assertion desnecessária no cálculo de melhor coordenada.
swift buildvalidado com sucesso.- A validação Gradle completa continuou bloqueada por erro pré-existente em
SkipUIgerado (GroupBoxCompat.kt), sem relação direta comMain.kt.
- Atualização/permissão de localização acionada também no