Cómo dar tus primeros pasos con Kotlin Multiplatform Mobile en Android y iOS
El desarrollo de aplicaciones móviles ha encontrado en Kotlin Multiplatform (KMP) una alternativa muy potente para compartir código entre sistemas operativos. Esta tecnología permite escribir una misma base de lógica que puede ejecutarse en Android, iOS, macOS, Windows y otras plataformas. En este artículo nos centramos en su variante móvil, conocida como Kotlin Multiplatform Mobile (KMM), cada vez más adoptada por equipos de desarrollo.
Si has escuchado hablar de KMM pero no sabes por dónde empezar, esta guía te dará las claves para entender su arquitectura, su funcionamiento y cómo crear tu primer proyecto desde cero con Android Studio.
¿Qué es exactamente Kotlin Multiplatform Mobile?
KMM es un conjunto de herramientas y convenciones que permite desarrollar aplicaciones móviles con una lógica de negocio compartida entre Android e iOS. En lugar de mantener dos bases de código separadas, puedes escribir una vez la lógica y reutilizarla en ambas plataformas, mientras que la interfaz de usuario (UI) se sigue desarrollando de forma nativa en cada una.
La filosofía de KMM no es sustituir el desarrollo nativo, sino optimizar el tiempo y esfuerzo dedicados a la lógica común, como gestión de datos, redes, persistencia, etc.
Este enfoque reduce la duplicación de código y facilita la coherencia entre plataformas, sin renunciar a la flexibilidad ni al rendimiento nativo.
Estructura interna de un proyecto KMM
Un proyecto KMM típico se compone de varios módulos y conjuntos de fuentes bien diferenciados. Entenderlos es esencial para aprovechar al máximo la tecnología.
- Módulo compartido (shared): contiene la lógica común para Android e iOS. Se compila como una biblioteca Android (
.aar) y como un framework de iOS (.framework). Usa Gradle con el plugin de Kotlin Multiplatform y define objetivos para ambas plataformas. - Aplicación Android (androidApp): es un módulo Kotlin estándar que integra el módulo compartido. Desde su archivo
build.gradlepuedes configurar la app Android con normalidad. - Aplicación iOS (iOSApp): es un proyecto Xcode independiente que utiliza el módulo compartido como un artefacto externo. No usa Gradle, sino el sistema de compilación de Xcode. Al crear el proyecto, puedes elegir entre integrar el framework de forma regular o mediante CocoaPods.
Fuentes de código: commonMain, androidMain e iosMain
Dentro del módulo compartido, el código se organiza en conjuntos de fuentes según la plataforma a la que va dirigido.
- commonMain: código compartido por todas las plataformas.
- androidMain: implementaciones específicas para Android.
- iosMain: implementaciones específicas para iOS.
Esta organización permite mantener la lógica común en un solo lugar y, al mismo tiempo, ofrecer comportamientos particulares cuando la plataforma lo requiere.
El mecanismo expect/actual
Uno de los pilares de KMM es el mecanismo expect/actual. Con expect declares una clase o función en commonMain, y con actual proporcionas la implementación real en cada plataforma.
Es similar a definir una interfaz y luego crear implementaciones concretas, pero a nivel de plataforma. Gracias a esto, puedes invocar APIs nativas desde código común sin romper la compilación en ningún sistema.
Gestión de dependencias: multiplataforma y nativas
En KMM conviven dos tipos de dependencias. Las dependencias multiplataforma son bibliotecas creadas específicamente para funcionar en varias plataformas, como kotlinx-datetime o Ktor. Estas se añaden al conjunto de fuentes commonMain.
Por otro lado, cuando una biblioteca está pensada solo para Android o solo para iOS, puede añadirse a androidMain o iosMain respectivamente. Aunque también es posible integrar librerías nativas (por ejemplo, dependencias Objective-C o Swift que exporten sus APIs a Objective-C), no es la opción más recomendable. Las librerías Swift puras todavía no son compatibles directamente.
Por tanto, la práctica habitual es usar dependencias multiplataforma para el código compartido y reservar las dependencias nativas para el código específico de cada aplicación móvil.
Creando tu primer proyecto KMM con Android Studio
El proceso es sencillo si sigues estos pasos. Abre Android Studio y elige la opción de crear una nueva aplicación Kotlin Multiplatform. En el asistente, selecciona la distribución de framework iOS como framework regular. De esta forma obtendrás un proyecto base con los módulos shared, androidApp y iOSApp ya configurados.
Si quieres profundizar en el uso de Android Studio, puede resultarte útil consultar alguna guía actualizada sobre Android Studio.
¿Qué hace el código generado?
El proyecto inicial incluye una clase Greeting.kt en shared/src/commonMain/kotlin. Esta clase es código común para ambas plataformas. La aplicación Android la invoca desde MainActivity.kt, mientras que la app iOS la invoca desde ContentView.swift. Si cambias el texto de Greeting.greet(), verás el nuevo mensaje en las dos aplicaciones.
Curiosamente, el mensaje mostrado incluye la versión del sistema operativo. Esto se consigue gracias al mecanismo expect/actual: en commonMain existe un archivo Platform.kt con una declaración expect, y en androidMain e iosMain encontramos las implementaciones actual correspondientes. Así se obtiene información nativa del sistema desde código compartido.
Añadiendo lógica común: fecha y consumo de API
Veamos ahora cómo enriquecer el proyecto con funcionalidades reales. Primero, añadimos la biblioteca kotlinx-datetime para mostrar la fecha actual. Al ser multiplataforma, se agrega a commonMain en el archivo build.gradle del módulo compartido.
Después, podemos incorporar una petición HTTP a una API. Para ello necesitamos varias dependencias:
kotlinx.coroutinespara programación asíncrona.kotlinx.serializationpara manejar JSON.Ktorcomo cliente HTTP multiplataforma.- El motor (engine) de Ktor específico para cada plataforma, que se añade a
androidMaineiosMain.
De este modo, la lógica de red y serialización vive en el módulo compartido, mientras que el motor subyacente se adapta a cada sistema operativo.
Si estás empezando, te recomiendo tener a mano algún libro de Kotlin para consultar conceptos con frecuencia.
Notas finales para tu primer proyecto KMM
Kotlin Multiplatform Mobile es una solución equilibrada para quienes buscan compartir lógica entre Android e iOS sin sacrificar la experiencia nativa. A lo largo de este artículo hemos visto qué es KMM, cómo se estructura un proyecto, cómo gestionar dependencias y cómo dar los primeros pasos con un ejemplo práctico en Android Studio.
Si vienes del mundo Android, la transición será prácticamente natural. Si tu perfil es de desarrollo iOS, notarás más cambios, pero Kotlin y Swift comparten muchas similitudes sintácticas y conceptuales, así que en poco tiempo podrás desenvolverte con soltura en un proyecto KMM.
Espero que esta guía te sirva como punto de partida y que te animes a explorar todas las posibilidades que ofrece Kotlin Multiplatform en tus próximos proyectos.