Paridade Android / iOS
Toda feature no Android deve existir no iOS com comportamento idêntico.
Fluxo
1
Android primeiro
Implementar em Kotlin, testar e validar.
2
iOS espelha
ViewController replica comportamento do Fragment.
Equivalências de Classes
| Android (Kotlin) | iOS (Swift) |
|---|---|
| Fragment + ViewModel | UIViewController + ViewModel |
| LiveData<T> | @Published / Combine |
| Coroutines async/await | Swift async/await |
| RecyclerView + Adapter | UITableView + DataSource |
| SharedPreferences | UserDefaults / Keychain |
| OkHttp | URLSession |
| Navigation Component | UINavigationController |
| TabHelpers | Métodos auxiliares no ViewController |
| BiometricPrompt | LAContext |
Paridade de Features Recentes
| Feature | Android | iOS | Observações |
|---|---|---|---|
| Painel de Controle Remoto / ConfigEngine (kill-switch de telas/botões via Firebase Remote Config) | Catálogo assets/app_config.json + motor RuntimeConfig (wiring realtime genérico de botões) |
Chama flag por flag por ViewController (RemoteConfigService.shared) |
Paridade ALTA em capacidade. Ambos expõem isScreenEnabled/isFlagEnabled/screenMaintenanceMessage; fail-safe (ausente/true = ligado). |
| Comprovação de entregas por canhoto (lista + detalhe + upload + câmera in-app com overlay/conferência + remover/substituir canhoto) | 3 pontos de entrada, incluindo botão "Entregas Pendentes" na Home | Sem botão "Entregas Pendentes" na Home (só por viagem) | Paridade ALTA. NF descontinuada; sem "código único" — comprovação só por foto. Divergência: pontos de entrada na Home. |
| Pontos autorizados e áreas de risco no mapa (motorista, gestor, grid) | Toggle do motorista via preferência local | Toggle do motorista protegido por flag remota (driver_trip_toggleStopPoints_enabled) |
Paridade ALTA. Mesmo endpoint GET /v1/trip/{tripId}/rotogram e mesmo contrato. Base ainda em STAGING (nginx) nas duas plataformas. |
| Cadastro de viagem migrado para v1 | Previsão de chegada via POST /v1/trip/arrival_forecast |
Previsão de chegada via POST /v1/journey/arrival_forecast |
Paridade ALTA. Ambos usam POST /v1/trip/ (singular) com duplo submit accept_nonconformity (false = análise, true = confirma) e gating GET /v1/trip/registration_permissions. Divergência menor a confirmar: endpoint da previsão de chegada. |