>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Kotlin

Cómo un proyecto Kotlin abarca Android, iOS, Web, Wear OS y agentes de IA

Cuando necesitas demostrar las capacidades de Kotlin Multiplatform en código real, es fácil perderse en arquitecturas complejas y decenas de capas de abstracción. John O'Reilly tomó un enfoque diferente. Eligió una tarea sencilla: mostrar una lista de personas en órbita y las coordenadas de la ISS. El resultado es un ejemplo claro de cómo un único módulo de lógica de negocio funciona en una docena de plataformas diferentes.

El proyecto llegó a la documentación oficial de Kotlin y a Google Dev Library. Desglosemos cómo está estructurado todo y por qué este código es un sandbox conveniente.

De qué trata el proyecto

La app obtiene datos de dos fuentes abiertas. La lista de astronautas con biografías viene de The Space Devs API, mientras que las coordenadas de la ISS se obtienen a través de la Open Notify API. Para evitar que los clientes accedan directamente a servicios de terceros, el repositorio incluye un pequeño backend con Ktor.

La idea principal aquí es la deduplicación de código. La lógica de negocio, las solicitudes de red, el caché y los modelos de datos se escriben una sola vez en un módulo compartido common. Este código luego se conecta a clientes que apuntan a todo tipo de sistemas operativos y pantallas diferentes.

La lista de objetivos soportados incluye:

  • Smartphones Android y widgets de pantalla de inicio usando Glance API
  • Aplicación iOS construida con SwiftUI
  • Relojes inteligentes con Wear OS
  • Versión de escritorio mediante Compose for Desktop
  • Cliente web usando Kotlin/Wasm
  • Componente del lado del servidor con Ktor
  • Servidor MCP para conectar con clientes de IA

Qué hay bajo el capó del módulo compartido

El módulo common maneja todo el código repetitivo. Utiliza librerías familiares para los desarrolladores de Kotlin:

  • Ktor Client maneja las solicitudes de red
  • SQLDelight se encarga del almacenamiento de base de datos local
  • Koin maneja la inyección de dependencias
  • Kotlinx Serialization analiza JSON

Compose Multiplatform y la librería SKIE manejan la comunicación con la UI. Esta última simplifica significativamente el trabajo con Swift al traducir corrutinas y Flow a conceptos async que los desarrolladores de iOS entienden.

class PeopleInSpaceViewModel(
    private val peopleInSpaceRepository: PeopleInSpaceRepositoryInterface
) : KMMViewModel() {

    val peopleInSpace: StateFlow<List<Assignment>> = 
        peopleInSpaceRepository.fetchPeopleAsFlow()
            .stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
}

Gracias a esta separación, los clientes de plataforma se mantienen ligeros. Solo manejan la renderización de la UI y los eventos táctiles del usuario.

De relojes inteligentes al navegador web

Cada cliente en el repositorio está estructurado como un módulo separado. Esto hace que sea fácil entender rápidamente cómo una tecnología específica se integra con el código KMP compartido.

La app de Android está construida con Jetpack Compose. Junto a ella está el módulo wearApp, donde la interfaz se adapta para pantallas redondas de relojes usando Compose for Wear OS. También encontrarás un widget funcional de pantalla de inicio para Android escrito con la Glance API.

Wear OS person list Wear OS edge button Wear OS ISS map

Para iOS, el autor ofrece dos caminos: una interfaz clásica con SwiftUI o código Compose compartido. La elección queda a criterio del desarrollador.

iOS UI

La versión del navegador está construida con Kotlin/Wasm. La compilación se ejecuta mediante una tarea estándar de Gradle, produciendo un frontend funcional sin necesidad de escribir JavaScript.

Compose for Web Wasm

Conectando a Claude Desktop mediante MCP

Una de las adiciones más recientes al repositorio es el módulo mcp-server. El autor implementó un servidor usando el Model Context Protocol con el SDK MCP oficial de Kotlin.

La idea es que el mismo módulo common con la lógica de negocio y la capa de red se incorpora en una aplicación de consola. Esta aplicación expone herramientas para inteligencia artificial. Al ejecutar el servidor local, puedes conectarlo a Claude Desktop u otro asistente.

La configuración para Claude Desktop se ve así:

{
  "mcpServers": {
    "kotlin-peopleinspace": {
      "command": "java",
      "args": [
        "-jar",
        "/path/to/repo/mcp-server/build/libs/serverAll.jar",
        "--stdio"
      ]
    }
  }
}

Después de eso, la red neuronal obtiene acceso directo a la función de recuperación de datos y puede responder preguntas sobre cosmonautas obteniendo información actualizada de tu código KMP.

MCP integration

Por qué revisar este repositorio

El repositorio PeopleInSpace es valioso no por la escala de su código, sino por el stack tecnológico actualizado. El autor actualiza constantemente las versiones de Kotlin, Gradle, Compose y las librerías relacionadas.

El proyecto es una buena referencia si estás planeando:

  1. Evaluar cuánto código puedes realmente reutilizar entre Android e iOS.
  2. Ver Kotlin/Wasm funcionando en un navegador en la práctica.
  3. Entender cómo funciona SKIE al pasar flujos de datos a Swift.
  4. Aprender cómo se construyen servidores MCP con Kotlin.

Para comenzar, simplemente clona el repositorio, ábrelo en una versión nueva de Android Studio y ejecuta la tarea de Gradle deseada.

Proyectos relacionados