SmartSpace es una aplicación iOS desarrollada con SwiftUI que permite a los usuarios explorar, gestionar y destacar espacios (como oficinas, salas, o ubicaciones) con información detallada y visualizaciones. La app ofrece funcionalidades para filtrar, buscar y marcar espacios como destacados, con una experiencia fluida y moderna.
- Descripción General
- Arquitectura y Tecnologías
- Características Principales
- Estructura del Proyecto
- Flujo de Navegación
- Gestión de Datos y Persistencia
- Diseño UX/UI
- Componentes Clave
- Mejoras Futuras
- Cómo Ejecutar el Proyecto
SmartSpace permite a los usuarios navegar entre diferentes espacios, visualizar detalles específicos, y gestionar una serie de espacios destacados. La aplicación está diseñada para ofrecer una experiencia intuitiva con soporte para búsquedas, filtros y visualización en mapa.
- SwiftUI: Framework principal para la construcción de la interfaz de usuario declarativa.
- SwiftData: Para la gestión y persistencia de datos locales, incluyendo la funcionalidad de espacios destacados.
- MVVM (Model-View-ViewModel): Patrón arquitectónico para separar la lógica de negocio de la UI.
- @Observable y @Query: Para la reactividad y sincronización automática de datos.
- NavigationStack y TabView: Para la navegación estructurada y pestañas principales.
- Listado de espacios: Visualización de todos los espacios disponibles o solo los destacados.
- Búsqueda y filtrado: Permite buscar espacios por nombre y filtrar por categoría.
- Detalle de espacio: Información detallada con variables de sensores y descripción.
- Gestión de destacados: Marcar o desmarcar espacios como favoritos con persistencia local.
- Toast notifications: Mensajes temporales que confirman acciones de marcado/desmarcado.
- Vista en mapa: Visualización geográfica de los espacios (implementación básica).
-
Views:
SpaceMainView: Vista principal con pestañas (Colección, Mapa, Destacados).SpaceContainerView: Lista de espacios filtrados y buscados.SpaceDetailView: Detalle individual de cada espacio.- Componentes auxiliares:
SearchBarView,FilterMenuView,SpaceGridView.
-
ViewModels:
SpaceContainerViewModel: Lógica para filtrado y búsqueda.SpaceDetailViewModel: Gestión del estado destacado y toast.
-
Modelos:
SpaceItem: Modelo principal que representa un espacio, con propiedades comoid,name,category,temperature, etc.
-
Persistencia:
- Uso de SwiftData para almacenar espacios destacados.
- Uso de
@Querypara sincronizar datos en tiempo real.
- Pantalla principal (
SpaceMainView): Pestañas para navegar entre Colección (todos los espacios), Mapa y Destacados. - Listado de espacios (
SpaceContainerView): Muestra espacios según el modo (todos o destacados), con búsqueda y filtros. - Detalle de espacio (
SpaceDetailView): Muestra información detallada y permite marcar/desmarcar como destacado. - Actualización de estado: Cambios en destacados se reflejan automáticamente en las listas y persistencia.
- Los espacios destacados se almacenan localmente usando SwiftData.
- La vista usa
@Querypara obtener los espacios destacados en tiempo real. - El ViewModel sincroniza el estado
isTrackedcon la base de datos para reflejar si un espacio está guardado. - Al marcar o desmarcar un espacio, se inserta o elimina la instancia gestionada en el contexto de SwiftData.
- Se maneja correctamente la eliminación buscando la instancia gestionada para evitar inconsistencias.
Se puede ver un primer boceto en el prototipo de Excalidraw.
Se puede ver un primer diseño en el prototipo de Figma.
- Toast personalizado: Mensajes que aparecen y desaparecen automáticamente para confirmar acciones.
- Filtros dinámicos: Permiten seleccionar categorías y buscar espacios por texto.
- Sincronización reactiva: Uso de
@Observabley@Querypara mantener la UI actualizada sin esfuerzo manual. - Gestión de contexto: Uso correcto de
ModelContextpara inserciones y eliminaciones. - Visualización de Datos con SwiftCharts: En la sección de detalles de cada espacio, se ha implementado una gráfica básica que muestra la variación mensual de la temperatura y el consumo energético utilizando la librería nativa SwiftCharts de iOS.
-
Gráficos y visualizaciones avanzadas: Incorporar gráficos dinámicos y detallados en la vista de detalle para mostrar variables de sensores y otros datos relevantes de forma visual e interactiva utilizando SwiftCharts.
-
Mejora de la vista de mapa: Añadir anotaciones interactivas para mejorar la experiencia de navegación geográfica de los espacios.
-
Sincronización en la nube: Implementar sincronización de datos entre dispositivos usando CloudKit o similar para que los espacios destacados y configuraciones se mantengan actualizadas en todos los dispositivos del usuario.
-
Optimización para grandes volúmenes de datos: Mejorar el rendimiento y la gestión de memoria para manejar colecciones muy grandes de espacios sin afectar la experiencia de usuario.
-
Tests automatizados: Añadir pruebas unitarias y de interfaz para asegurar la estabilidad y calidad del código, facilitando futuras modificaciones y mantenimiento.
-
Mejoras en la accesibilidad: Asegurar que la app sea completamente accesible, incluyendo soporte para VoiceOver, Dynamic Type y otros ajustes de accesibilidad.
-
Modo oscuro personalizado: Ajustar estilos y colores para ofrecer una experiencia visual óptima en modo oscuro, manteniendo coherencia y legibilidad.
-
Internacionalización: Añadir soporte para múltiples idiomas para ampliar la base de usuarios.
-
Notificaciones push: Implementar notificaciones para alertar a los usuarios sobre cambios importantes o novedades en los espacios destacados.
-
Integración con Siri y Atajos: Permitir acciones rápidas y comandos de voz para gestionar espacios destacados o buscar información.
-
Mejoras en la UI/UX: Refinar animaciones, transiciones y diseño para una experiencia más fluida y atractiva.
-
Gestión avanzada de filtros: Permitir combinaciones múltiples de filtros y guardado de configuraciones personalizadas.
-
Modo offline: Mejorar la experiencia cuando no hay conexión a internet, con almacenamiento y sincronización diferida.
-
Soporte para iPad y macOS: Adaptar la interfaz para pantallas más grandes y aprovechar características específicas de cada plataforma.
-
Clona el repositorio:
git clone https://github.com/carlosrasensio/SmartSpace.git cd SmartSpace