CixCash es una aplicación móvil de conversión de criptomonedas y gestión de transacciones, desarrollada con Kotlin Multiplatform (Android/iOS). Permite consultar precios actualizados, convertir entre monedas y registrar transacciones fácilmente.
CixCash es una aplicación de conversión de criptomonedas y divisas. Desarrollada en Kotlin Multiplatform para Android/iOS. Permite registrar transacciones, visualizar balances convertidos a pesos argentinos (ARS), y realizar conversiones entre monedas como USD, BTC y ETH.
- Consulta de tasas de cambio actualizadas (USD, BTC, ETH, ARS).
- Conversión de montos entre monedas
- Soporte multiplataforma (Android e iOS).
- Visualización de transacciones de converción recientes
- Cálculo del balance total en ARS
- Theme Oscuro y Claro
- Manejo de estados con
StateFlow - UI moderna con
Jetpack ComposeyMaterial3 - Arquitectura limpia con
MVVM
- SDK minSdk: 24.
- SDK targetSdk: 35.
- Kotlin Multiplatform (KMP) Reutilización de lógica de negocio en Android e iOS Kotlin KMP -
- Ktor Cliente HTTP asíncrono multiplataforma para realizar llamadas a APIs Ktor
- Koin Inyección de dependencias liviana y flexible Koin
- Material3 Implementación del sistema de diseño Material Design actualizado Material3
- Basado en Kotlin, utilizando Coroutines + Flow para operaciones asíncronas.
- Jetpack Compose: Kit de herramientas moderno de Android para desarrollo de UI declarativa.
- Lifecycle: Observa los ciclos de vida de Android y gestiona los estados de UI ante cambios de ciclo de vida.
- ViewModel: Administra datos relacionados con la UI y es consciente del ciclo de vida, asegurando la persistencia de datos tras cambios de configuración.
- Navigation: Facilita la navegación entre pantallas, complementado con Hilt Navigation Compose para inyección de dependencias.
- Room: Permite construir una base de datos con una capa de abstracción sobre SQLite para un acceso eficiente a los datos.
- Arquitectura MVVM (View - ViewModel - Model): Promueve la separación de responsabilidades y mejora el mantenimiento del código.
- Patrón Repository: Actúa como mediador entre diferentes fuentes de datos y la lógica de negocio de la aplicación.
- Kotlin Serialization: Serialización sin reflejos para múltiples plataformas y formatos en Kotlin.
- ksp: API de procesamiento de símbolos en Kotlin para generación y análisis de código.
CixCash App sigue el patrón de arquitectura MVVM (Model-View-ViewModel) y se estructura en capas bien definidas para garantizar el mantenimiento, escalabilidad y separación de responsabilidades: Guía oficl de arquitectura de Google.
Model View ViewModel (MVVM)
Model: Repositorios, acceso a la base de datos (Room), y clientes de red (Ktor)ViewModel: Lógica de presentación, manejo de estados conStateFlowView: Composables que representan la UI, observan el estado y reaccionan a eventos
Layer : Presentation, Domain, Data.
Presentation: Maneja todo lo relacionado a la interfaz de usuario (UI), estados (State), eventos (Event) y ViewModels.Domain: Contiene los modelos de negocio (model) y los casos de uso (usecase) que definen la lógica de la aplicación de forma independiente a cualquier framework o librería.Data: Implementa la lógica de acceso a datos, ya sea local (Room Database) o remoto (API con Ktor). Está dividida en repository, local y remote. Esta organización sigue las buenas prácticas de arquitectura limpia (Clean Architecture) adaptadas al contexto de aplicaciones móviles.
CixCash/
├── androidMain/ # Código específico de Android
│ ├── data/database # Inicialización Room de Android
│ └── di/ # Inyección de dependencias para Android
│ └── shared/ # Clases aplicadas solo para Android (Toast, BigDecimal, DateUtil)
├── commonTest/ # Módulo testing (Casos de uso)
├── commonMain/ # Módulo multiplataforma (Kotlin común)
│ ├── data/
│ │ ├── database/ # Database, DAOS y Entities
│ │ ├── remote/ # Ktor Client para APIs, ApiService
│ ├── di/ # Inyección de dependencias común (Koin)
│ ├── domain/
│ │ ├── model/ # Entidades y modelos de negocio
│ │ ├── usecase/ # Casos de uso de la aplicación
│ └── shared/ # Expect functions para Android/iOS
│ ├── ui/
│ │ ├── core/ # Componentes, navegación y funciones de extensión
│ │ ├── convert/ # Scree, ViewModel, State, Action y Event, conversión de monedas
│ │ ├── home/ # Scree, ViewModel y State, mi portafolio
│ │ ├── transacion/ # Scree, Viewmodel y State, para mostras las transacciones
├── iosMain/ # Código específico de iOS
│ ├── data/database # Inicialización Room de iOS
│ └── di/ # Inyección de dependencias para iOS
│ └── shared/ # Clases aplicadas solo para iOS (Toast, NSDecimalNumber, DateUtil)
├── build.gradle.kts # Configuración de composeApp
- KMMDateUtil : obtener la fecha actual, así actualizar la fecha en las transacciones
- KMMDecimal: Al trabajar con monedas el control de los decimales es importante, considerando que son criptomonedas que limitado a un máximo de 10 decimales para esos caso. Además para garantizar exactitud he aplicado BigDecimal (Android) y NSDecimalNumber[iOS]
- KMMToast: El Toast que estamos acostumbrados en Android, no es compatible con KMM así que adapte la funcionalidad según la plataforma
git clone https://github.com/gonzalo-droid/CixCashApp- Visita https://docs.coingecko.com/v3.0.1/reference/introduction
- Regístrate o inicia sesión.
- Dirígete a la sección API de tu cuenta y genera una nueva clave de API
const val COIN_GECKO_API_KEY = "TU_API_KEY"
const val API_HOST = "api.coingecko.com"
const val API_KEY = "x-cg-demo-api-key"- Usa Gradle para compilar y ejecutar el proyecto:
./gradlew runPara Android, abre el proyecto en Android Studio y ejecuta la aplicación desde allí.
** Recuerda que para iOS necesitas una mac y así emular en un iphone
💡 Si quieres proponer mejoras o corregir errores:
- Haz un fork del repositorio.
- Crea una rama con tu mejora.
git checkout -b feature/your-feature-name- Realiza los cambios y haz un commit.
git commit -am 'Add some feature'- Sube los cambios a tu repositorio.
git push origin feature/your-feature-name- Abre un Pull Request para revisión.
✨ Espero que este proyecto te sea útil para seguir aprendiendo.
💡 ¡Puedes colaborar en mejoras del proyecto dejando un Pull Request!
⭐ Además, agradecería mucho que le dieras una estrella al proyecto 🤩
Aún estoy definiendo el formato 🫠, pero lo importante es empezar. ¡Suscríbete y vamos a codear!
- Soporte para autenticación, Google Auth
- Listar todas la monedas disponibles
- Filtros en las transacciones
- Gráficas Traker
This project is licensed under the MIT License. See the LICENSE file for details.
