- app.json: bundleIdentifier + buildNumber para iOS
- eas.json: perfiles iOS (development con simulador, preview ipa, production)
y appleId para submit
- app.config.js: inyección de GOOGLE_MAPS_IOS_KEY (opcional; por defecto
la app usa Apple Maps en iOS sin necesitar key)
- FeatureMap: MAP_PROVIDER = PROVIDER_GOOGLE en Android, PROVIDER_DEFAULT
(Apple Maps) en iOS; elimina dependencia de Google Maps key en iOS
Pendiente: generar /ios con 'npx expo prebuild --platform ios' desde macOS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- FooterOverlay: franja oscura (logo izquierda, campos derecha) superpuesta
sobre la foto antes de encolarla; tamaños proporcionales a la resolución.
- MediaStrip: capta coordenadas GPS (expo-location) al abrir el picker,
estampa el footer con react-native-view-shot (view off-screen + onLoad),
y añade icono ⚙ → PhotoSettings. Fallback: usa foto original si el stamp falla.
- PhotoSettingsScreen (modal): toggle general, selector de logo cuadrado,
activar/desactivar/editar etiqueta de cada campo (proyecto, fecha, coords)
y añadir campos personalizados con etiqueta + valor estático.
- footerConfig: persiste en meta table (clave 'photo_footer_config').
- repositories: añade getProject(id).
- navigation: ruta PhotoSettings como modal.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fase 0: config Android (package, permisos, orientación), eas.json (APK), deps
nativas (react-native-maps, image-picker, location), app.config.js para la key
de Google Maps por secreto EAS.
Fase 1: capa responsive (useLayout) + componente MasterDetail (dos paneles en
tablet, navegación en móvil).
Fase 2: pantallas funcionales — detalle de proyecto con secciones Fases/Features/
Incidencias, edición de progreso/estado, formulario de inspección dinámico
desde plantilla, incidencias maestro-detalle (checklist + comentarios), alta de
incidencia; gating por permisos Spatie.
Fase 3: fotos (cámara/galería) → cola de media, con miniaturas pendientes/sync.
Fase 4: mapa de features (Google Maps) con geometría GeoJSON y selección.
Fase 5: auto-sync (foreground/reconexión/intervalo, con candado) + reconciliación
de creaciones offline (id temporal negativo → server_id, remapeo de FKs hijas).
Fase 6: revisión de conflictos/errores del outbox, indicadores y APK preview.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>