Skip to content

christopher-two/Weather

Repository files navigation

Weather — Aplicación Kotlin Multiplatform

Aplicación de ejemplo escrita en Kotlin Multiplatform y Compose Multiplatform que muestra datos meteorológicos obtenidos desde la API de OpenWeather. El proyecto incluye targets para Android, iOS, Web (WASM) y Desktop (JVM) y está organizado para compartir lógica de dominio y UI con Compose.

Características principales

  • Consulta del clima actual de una ubicación usando la API de OpenWeather.
  • UI construida con Compose Multiplatform (reutilizable entre targets).
  • Arquitectura limpia con capas de dominio, repositorio y presentación.
  • Inyección de dependencias con Koin.
  • Cliente HTTP multiplataforma con Ktor.

Stack tecnológico

  • Lenguaje: Kotlin Multiplatform (Kotlin/MPP)
  • UI: Compose Multiplatform
  • HTTP: Ktor client
  • DI: Koin
  • Targets: Android, iOS (SwiftUI host), Desktop (JVM), Web (WASM)

Estructura relevante del proyecto

  • composeApp/src/commonMain/kotlin/org/christophertwo/weather
    • App.kt — punto de entrada multiplataforma (Composable)
    • domain/ — modelos, DTOs, repositorio y provider del cliente HTTP
      • OpenWeatherRepositoryImpl.kt — implementación del repositorio que consume la API
      • HttpClientProvider.kt — proveedor del cliente Ktor
      • dto/ y model/ — mapeos de la respuesta a dominio
    • domain/usecase/FetchWeatherUseCase.kt — caso de uso para obtener el clima
    • presentation/features/main — composables, viewmodel y estados (MainScreen, MainViewModel)
    • di/ — módulos de Koin (DomainModule, ViewModelModule)
  • iosApp — proyecto iOS con entrypoint Swift/SwiftUI que aloja el composable para iOS
  • composeApp/src/androidMain — Application y MainActivity para Android
  • composeApp/src/jvmMain / wasmJsMain — entradas para Desktop y Web

Configuración necesaria

  1. API Key de OpenWeather

    • Obtén una API Key en https://openweathermap.org/.
    • Para ejecutar en local, exporta la variable de entorno OPENWEATHER_API_KEY o agrégala en tu archivo local seguro (local.properties) según prefieras.

    Ejemplo (Linux/macOS): export OPENWEATHER_API_KEY=tu_api_key_aqui

    También puedes exportarla justo al ejecutar Gradle: OPENWEATHER_API_KEY=tu_api_key_aqui ./gradlew :composeApp:assembleDebug

  2. Configuración adicional

    • Asegúrate de tener Java JDK (11+ recomendado) y Android SDK si vas a compilar para Android.
    • Para iOS, abre el workspace/ carpeta iosApp en Xcode desde macOS.

Compilar y ejecutar Desde la raíz del proyecto (usa el wrapper incluido):

  • Android (ensamblar APK de debug): ./gradlew :composeApp:assembleDebug

    Ejecuta desde Android Studio o instala el APK en un emulador/dispositivo.

  • Desktop (JVM): ./gradlew :composeApp:run

  • Web (WASM) — modo desarrollo (servidor web local): ./gradlew :composeApp:wasmJsBrowserDevelopmentRun

  • iOS:

    • Abre iosApp/iosApp.xcodeproj o iosApp/ en Xcode y ejecuta la app en un simulador o dispositivo.
    • Alternativamente, usa las tareas de Gradle para generar frameworks si lo prefieres.

Notas de arquitectura y desarrollo

  • Inyección: Los módulos Koin están en composeApp/src/commonMain/kotlin/org/christophertwo/weather/di. Se inicializa en App.kt para ambientes de desarrollo.
  • Repositorio: OpenWeatherRepositoryImpl encapsula la llamada a la API y transforma DTOs a modelos de dominio.
  • Usecases: FetchWeatherUseCase representa la lógica de negocio para obtener el clima.
  • ViewModel: MainViewModel contiene el estado y expone acciones (MainAction) para la UI.
  • HTTP: HttpClientProvider centraliza la configuración del cliente Ktor (timeouts, logging, motores según target).

Pruebas

  • Hay pruebas comunes en composeApp/src/commonTest. Ejecuta: ./gradlew :composeApp:check

Contribuir

  • Abrir issues para reportar bugs o proponer mejoras.
  • Crear ramas temáticas y enviar pull requests con descripciones claras.
  • Mantener la retrocompatibilidad en los módulos compartidos cuando sea posible.

Licencia

  • Añade la licencia que prefieras en el archivo LICENSE en la raíz del repositorio.

Contacto

  • Este repositorio contiene el código de la app Weather. Para dudas internas del proyecto, revisa los comentarios en los archivos bajo composeApp/src/commonMain/kotlin/org/christophertwo/weather.

(README generado automáticamente — editar según preferencias y añadir capturas, badge de CI, y la licencia si corresponde.)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages