MELIStore es una aplicación iOS moderna, modular y altamente escalable, diseñada para ofrecer una experiencia fluida en la búsqueda y visualización de productos. Este proyecto está construido siguiendo prácticas avanzadas de arquitectura de software, herramientas de automatización y principios de diseño profesional.
MELIStore adopta una arquitectura modular utilizando Swift Package Manager (SPM), lo que permite una estructura de proyecto limpia, desacoplada y fácil de escalar.
-
MELIStoreCore
Contiene todos los comportamientos generales del dominio del negocio. Aquí se encapsulan los modelos, contratos y servicios compartidos por los distintos módulos de la app. -
MELIStoreDesignSystem
Centraliza todos los estilos, componentes visuales reutilizables, colores, tipografías y temas de marca. Este paquete permite mantener la coherencia visual en toda la aplicación.
El submódulo MELIStoreProducts se encarga de las siguientes funcionalidades clave:
- Búsqueda de productos
- Visualización de resultados
- Detalle de producto
Este módulo funciona de manera independiente y desacoplada, consumiendo únicamente dependencias del Core y el DesignSystem.
Cada submódulo está implementado siguiendo los siguientes principios:
- ✅ Arquitectura limpia basada en DDD (Domain-Driven Design)
- ✅ Diseño atómico de interfaces
- ✅ Inyección de dependencias mediante
SwiftDependencyInjector(también desarrollado por el autor del proyecto) - ✅ Tests unitarios completos que garantizan el correcto funcionamiento de cada feature
El proyecto está equipado con una serie de herramientas y configuraciones que mejoran el flujo de trabajo del desarrollo:
-
Git hooks automatizados con
pre-commit -
Linting automático con
SwiftLint -
Archivos
.envpara manejar configuraciones sensibles por entorno -
Schemas de compilación personalizados
-
Inicialización del proyecto con
make
El archivoMakefileya está preparado para ejecutar comandos como:make setup make test make lint
- Búsqueda Rápida de Productos: Permite a los usuarios encontrar productos de manera ágil y eficiente.
- Interfaz Amigable y Moderna: Diseñada para ofrecer una experiencia de usuario intuitiva y atractiva.
- Arquitectura Modular y Escalable: Facilita la mantenibilidad y expansión de la aplicación.
- Plataforma: iOS 17.0 o superior
- Lenguaje: Swift 6.0 o superior
- Dependencias:
- MELIStoreCore: Proporciona funcionalidades esenciales y modelos de datos.
- MELIStoreProducts: Gestiona la lógica relacionada con los productos.
- MELIStoreDesignSystem: Ofrece componentes de interfaz de usuario reutilizables y estilos coherentes.
- Alamofire: Maneja operaciones de red de manera sencilla y eficiente.
- SwiftLint: Mantiene un estilo de código coherente en Swift.
Este proyecto utiliza archivos .env para manejar variables de entorno sensibles como claves de API u otras configuraciones que no deben ser compartidas públicamente.
- Los archivos
.envdeben estar ubicados en la raíz del proyecto. - No deben ser incluidos en ningún commit.
- Asegúrate de contar con un
.envy un.env.deven tu entorno local. Estos se usarán dependendiendo delschemade compilación que uses en el proyecto.
// Config.xcconfig
// MELIStore
//
// Created by Xcode automatically.
//
ACCESS_TOKEN = YOUR_ACCESS_TOKEN
BASE_URL = YOUR_SERVICES_BASE_URLNOTA: Esta plantilla ya se encuentra creada en el proyecto
Este proyecto utiliza un archivo Makefile para configurar el entorno de desarrollo de forma automática y segura. Incluye herramientas como SwiftLint, pre-commit, hooks de Git, y manejo de archivos .env.
- macOS con Homebrew instalado.
- Git.
- Swift >= 5.9.
- Swift Package Manager (SPM).
make— disponible por defecto en macOS.
Con solo ejecutar make, se realizan las siguientes acciones:
Verifica si SwiftLint está instalado, y si no lo está, lo instala con Homebrew.
SwiftLint es una herramienta que verifica el estilo de tu código Swift según convenciones definidas.
Verifica si pre-commit está instalado, lo instala si es necesario y configura un hook de pre-commit automático.
pre-commitpermite validar código antes de hacer commits. En este proyecto se encarga de:
- Ejecutar
swiftlintsobre los archivos modificados.
Crea un hook de Git llamado pre-push, que se activa automáticamente antes de realizar un git push.
Este hook:
- Corre
pre-commiten todos los archivos. - Ejecuta los tests con
swift test. - Si algo falla, el push se cancela.
Verifica si los archivos .env y .env.dev existen. Si no están presentes, los crea copiando desde .env.template.
Esto asegura que todos los desarrolladores tengan archivos de entorno configurados correctamente desde el inicio.
Comandos adicionales:
make lint-fix: intenta corregir errores de lint automáticamente usandoswiftlint --fix.
Solo es necesario que ejecutes el comando "make" en tu terminal (sobre la raíz del proyecto) y las configuraciones descritas anteriormente seran aplicadas al proyecto.
makeAsegurate de que siempre existan los siguientes archivos en el proyecto:
├── Makefile
├── .swiftlint.yml
├── .env.template
├── .pre-commit-config.yaml
├── scripts/
│ └── pre-push
│ └── check-xcconfig.sh
-
Si ves errores como Permission denied al ejecutar los hooks, ejecuta lo siguiente:
chmod +x scripts/pre-push chmod +x scripts/check-xcconfig.sh
-
SwiftLint no encuentra el archivo de configuración: Asegurate de que .swiftlint.yml esté en la raíz del proyecto.
-
Errores al hacer push: El hook de pre-push cancela el push si falla un test o hay errores de lint. Corregilos antes de volver a intentar.
Este setup fue diseñado para automatizar al máximo el flujo de trabajo de este proyecto. Pensado especialmente para mantener consistencia, calidad y productividad desde el primer make.
Desarrollado por Andrés Duque.
Las ilustraciones utilizadas en este proyecto son proporcionadas por Storyset: