Noticia Cómo migrar la capa de una aplicación Android empresarial a Kotlin Multiplatform de forma limpia

Cómo migrar la capa de una aplicación Android empresarial a Kotlin Multiplatform de forma limpia


Si te has pasado años puliendo una aplicación empresarial en Android y ahora te han pedido que el proyecto llegue también a los usuarios de Apple, seguramente te estés preguntando si tienes que tirar todo el trabajo por la ventana. La buena noticia es que Kotlin Multiplatform (KMP) ha llegado para salvarnos el pellejo, permitiéndonos reutilizar la lógica de negocio sin tener que escribir el mismo código dos veces en lenguajes distintos.

No se trata de una herramienta mágica que hace todo el trabajo sola, sino de una estrategia inteligente para compartir la capa de datos y dominio. Básicamente, movemos lo que es común a ambas plataformas a un sitio central y dejamos que cada sistema gestione su propia interfaz, lo que nos permite mantener la calidad de una app nativa pero con la eficiencia de un desarrollo unificado.

Cómo montar el módulo compartido desde cero​


Para empezar con buen pie, lo más sencillo es aprovechar las herramientas oficiales. Si usas Android Studio Meerkat y tienes el plugin de Gradle en su versión 8.8.0 o superior, tienes la vida regalada gracias a la plantilla Kotlin Multiplatform Shared Module. Esta opción te automatiza toda la configuración básica para que no te vuelvas loco con los archivos de configuración.

El proceso es bastante intuitivo: vas a File > New > New Module y seleccionas la plantilla específica de KMP. Aquí tendrás que definir el nombre del módulo (que servirá también como nombre del framework en iOS) y el paquete de los archivos. Una vez le des a terminar, deja que Gradle haga su magia sincronizando el proyecto. Verás que se crean carpetas específicas para cada plataforma y un espacio común llamado commonMain, que es donde ocurre la verdadera acción.

Integrando la lógica compartida en Android​


Cómo migrar la capa de una aplicación Android empresarial a Kotlin Multiplatform de forma limpia


Crear el módulo es solo la mitad del camino; ahora hay que decirle a tu aplicación de Android que utilice ese código. El asistente no lo hace automáticamente, así que debes añadir la dependencia manualmente en tu archivo de Gradle. Lo habitual es añadir implementation(project(«:shared»)) dentro del bloque de dependencias.

Si eres de los que han activado los Type-safe project accessors de Gradle, puedes simplificarlo usando projects.shared. Una vez vinculado, tu app de Android podrá consumir sin problemas todo aquello que hayas programado en androidMain o commonMain, integrándose de forma totalmente natural en el flujo de trabajo.

Configuración y despliegue en el ecosistema iOS​


Aquí es donde la cosa se pone interesante, ya que Swift no entiende Kotlin de forma nativa. Para que se lleven bien, necesitamos generar un framework binario compilado. La plantilla de Android Studio ya deja preparado el archivo build.gradle.kts con las configuraciones para las distintas arquitecturas de Apple, como iosX64, iosArm64 e iosSimulatorArm64.

Por defecto, el framework se llama sharedKit, aunque puedes cambiar esta variable xcfName si prefieres un nombre más acorde a tu marca. Para que Xcode sepa qué hacer, debes añadir una fase de ejecución de script llamada Compile Kotlin Framework. Es vital que este script se ejecute antes de compilar las fuentes de Swift para que el código de Kotlin ya esté disponible cuando Swift lo busque.

Para verificar que todo funciona, basta con ir al archivo ContentView.swift en Xcode, importar la librería sharedKit y llamar a alguna función del módulo compartido, como la clásica platform(), para confirmar que la app reconoce que se está ejecutando en iOS.

Saltando a Kotlin 2.0 y Compose Multiplatform​


Si quieres dar el salto a la versión 2.0 de Kotlin, hay un par de retoques necesarios. Primero, actualiza la versión en tu archivo libs.versions.toml y no olvides añadir la carpeta .kotlin al archivo .gitignore para no subir basura innecesaria al repositorio.

Un cambio fundamental es el compilador de Compose, que ahora es un plugin integrado de Kotlin. Debes añadir org.jetbrains.kotlin.plugin.compose en el catálogo de versiones y aplicarlo en los archivos build.gradle correspondientes. Esto te permite eliminar el bloque composeOptions y aprovechar un DSL mucho más limpio para configurar cosas como el strongSkippingMode.

Además, si utilizas KSP (Kotlin Symbol Processing), asegúrate de actualizarlo a una versión compatible con Kotlin 2.0 para evitar errores de compilación molestos. Si ya tienes experiencia con Jetpack Compose, puedes adaptar ese código hacia Compose Multiplatform, lo que te permitirá compartir no solo la lógica, sino también parte de la interfaz de usuario, aunque siempre habrá que ajustar algunos detalles específicos para que la experiencia en iOS sea fluida.

Migrar una infraestructura empresarial hacia KMP implica organizar el código en un módulo compartido, vincularlo correctamente a Android mediante Gradle y configurar Xcode mediante scripts de compilación para iOS. Al actualizar a Kotlin 2.0, se simplifica la gestión del compilador de Compose y se optimiza la estructura del proyecto, permitiendo que la lógica de dominio sea única y la interfaz se adapte a cada plataforma.

Continúar leyendo...