Cómo agregar Kotlin multiplataforma a un proyecto existente

Para crear un módulo de Kotlin Multiplatform (KMP) en tu proyecto de Android, usa la plantilla Kotlin Multiplatform Shared Module, disponible en Android Studio Meerkat y el complemento de Android para Gradle 8.8.0 y versiones posteriores.

La plantilla de módulo automatiza la creación de un módulo nuevo con la configuración mínima para las plataformas de Android y iOS. KMP también admite otros destinos, como computadoras de escritorio y la Web, que puedes agregar al módulo más adelante. Para obtener la lista completa, consulta Estabilidad de las plataformas compatibles. Para declarar un destino, consulta Destinos en la referencia del DSL de Gradle multiplataforma.

Configura el módulo de KMP compartido

Para crear un módulo de KMP compartido, sigue estos pasos:

  1. Selecciona File > New > New Module.
  2. Selecciona la plantilla Kotlin Multiplatform Shared Module en el panel Templates:
Cómo crear un nuevo módulo de KMP
Figura 1: Crea un nuevo módulo de KMP

Los campos de la plantilla son los siguientes:

  • Module name: Define el nombre del módulo de Gradle, así como el nombre del framework de iOS (se puede cambiar más adelante).
  • Package name: Define el nombre del paquete para los archivos de este módulo.
    1. Haz clic en Finish y permite que Gradle se sincronice con el proyecto. También es posible que se te solicite agregar los archivos de módulo creados recientemente al control de código fuente.

Una vez que se complete, la vista de proyecto de Android Studio mostrará el nuevo módulo compartido junto con un conjunto de fuentes para cada plataforma.

Vista del proyecto que muestra los nuevos módulos compartidos
Figura 2: Vista de proyecto que muestra los nuevos módulos compartidos

El asistente de módulos no agrega el módulo recién creado como dependencia a ningún módulo existente. Como siguiente paso, debes vincular el módulo compartido a uno de tus módulos de Gradle existentes, de manera similar a otras dependencias de Android:

dependencies {
    ...
    implementation(project(":shared"))
}

Una vez que lo habilites, podrás acceder al código como de costumbre. Desde la app para Android, puedes acceder al código que está disponible en androidMain o en commonMain.

Para obtener más información sobre la estructura de los proyectos de Kotlin Multiplatform, consulta los conceptos básicos de la estructura de los proyectos de Kotlin Multiplatform.

Configura el módulo compartido en la app para iOS

Swift no puede usar módulos de Kotlin directamente y requiere que se produzca un framework binario compilado.

La nueva plantilla de módulo en Android Studio configura el módulo compartido para producir un framework para cada una de las arquitecturas de iOS. Puedes encontrar el siguiente código en el archivo build.gradle.kts del módulo compartido:

val xcfName = "sharedKit"

iosX64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosSimulatorArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

Consulta Estructura jerárquica del proyecto para obtener información sobre cómo definir otros tipos de arquitectura.

Para habilitar el acceso al código compartido desde el proyecto de iOS, agrega una fase de secuencia de comandos que genere el framework de Kotlin antes de compilar las fuentes de Swift:

  1. Haz clic con el botón derecho en el archivo en Android Studio y selecciona Open In y Open in Associated Application. Se abrirá la app para iOS en Xcode.
Abrir en la aplicación asociada
Figura 3. Abrir en la aplicación asociada
  1. Haz doble clic en el nombre del proyecto en el navegador de proyectos para abrir la configuración del proyecto.
Diálogo de configuración del proyecto de Xcode
Figura 4. Diálogo de configuración del proyecto de Xcode
  1. Cambia el nombre predeterminado Run Script a Compile Kotlin Framework para identificar mejor lo que hace esta fase. Haz doble clic en el título Run Script para editarlo.
  2. Expande la fase de compilación y, en el campo de texto Shell, ingresa el siguiente código de secuencia de comandos:
Agrega una nueva fase de compilación de ejecución de secuencia de comandos
Figura 5: Fase de compilación de la ejecución de la secuencia de comandos
  1. Arrastra la fase Run Script antes de la fase Compile Sources.

    Ejecuta la fase de compilación de la secuencia de comandos antes de compilar las fuentes
    Figura 6: Ejecuta la fase de compilación de la secuencia de comandos antes de compilar las fuentes

  2. Para compilar el proyecto en Xcode, haz clic en ⌘B o navega al menú Product y selecciona Build.

Cuando la compilación se realice correctamente, verás el siguiente ícono.

Compilación exitosa que se muestra en Xcode
Figura 7: Compilación correcta

Accede al código compartido en la app para iOS

Para verificar que la app para iOS pueda acceder correctamente al código del módulo compartido, haz lo siguiente:

  1. En el proyecto de iOS, abre el archivo ContentView.swift en: Sources/View/ContentView.swift
  2. Agrega la importación sharedKit en la parte superior del archivo.
  3. Modifica la vista de texto para incluir la información de Platform_iosKt.platform() en la cadena que se muestra de la siguiente manera:

Esta actualización verifica si la app puede llamar a la función platform() desde el módulo compartido, que debería mostrar "iOS" cuando se ejecuta en la plataforma de iOS.

Simulador de Xcode que ejecuta la app para iOS
Figura 8: Simulador de Xcode que ejecuta la app para iOS

Recursos adicionales