2.0: los dos ultimos pasos del onboarding (aha moment + paywall) no se muestran nunca #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Detectado al revisar en GA4 quien esta usando la 2.0.
Sintoma en datos
GA4 (28d, appVersion 2.0): pasos 0-4 registran eventos
onboarding_step_viewed(5,4,4,4,4 usuarios) y hay 3onboarding_completed, pero cero eventos con step 5 o 6. Si esos pasos se renderizaran, elonChangede OnboardingView los habria emitido.Causa
El onboarding tiene 7 pasos (tags 0-6 en
OnboardingView.swift). Al terminar el paso 4:completeOnboardingponesettings.onboardingCompleted = true(OnboardingViewModel.swift:140) y hacecontext.save(). Ese flag es el que decide enContentView.swift:22si se pintaHomeViewuOnboardingView. Comosettingses un@Queryde SwiftData, el save re-renderiza y destruyeOnboardingViewantes de quenextStep()pinte el paso 5.Impacto
pendingPremiumPromptKeyen HomeView.Bug secundario
AnalyticsService.swift:112-115tiene los nombres de paso desalineados: el indice 5 es5_paywallcuando el paso 5 es WeekReady, y el paso 6 no tiene nombre.Fix propuesto
Separar persistir los datos de marcar el onboarding como terminado: el paso 4 guarda platos/plan sin tocar el flag, y el flag se escribe al salir del paso 6 (paywall). Revisar
pendingPremiumPromptKeypara no mostrar el paywall dos veces.Implementado en
3694297.OnboardingViewModel.completeOnboarding(context:markFinished:)— el paso 4 pasamarkFinished: false, asi que commitea platos y plan sin tocar el flag y el flujo sigue en pantalla.OnboardingViewModel.finishOnboarding(context:)(nuevo) — escribeonboardingCompletedy hace save; se llama desdeonSkip/onConvertedde PaywallStepView.AnalyticsService— nombres de paso corregidos:5_week_ready,6_paywall.No hizo falta tocar el prompt premium:
schedulePostOnboardingPremiumPromptIfNeededen HomeView ya lo difiere a la segunda sesion (el codigo estaba escrito asumiendo que el paso 6 se veia).Verificado: build OK y suite completa de MealMoodTests en verde, con tres tests nuevos que cubren el contrato (
markFinished: falsedeja el flag a false pero persiste dish + weekplan;finishOnboardinglo pone a true; el comportamiento por defecto sigue marcando terminado).Pendiente de comprobacion visual: no he podido pulsar por los 5 pasos en el simulador (AppleScript no puede controlarlo sin permisos de accesibilidad), asi que los pasos 5 y 6 no se han visto renderizar con los ojos. La logica esta cubierta por tests, pero conviene un pase manual antes de subir build.