Exponer el módulo de recursos separado al objetivo de iOS usando moko-resources en KMM | de Piotr Prus | mayo 2022

Foto de Sophie Elvis a través de UnsplashEn el desarrollo de Android, la modularización de aplicaciones es un patrón común que ayuda a organizar el código, mejorar la legibilidad y facilitar el intercambio entre proyectos. Algunos dicen que también reduce el tiempo de construcción, pero eso no es parte de este artículo. Si desea obtener más información, mire este video de Google I/O’19. Siempre que sus módulos estén basados ​​en funciones o capas, los recursos, como el texto o los íconos localizados, se pueden usar en cualquier parte de la interfaz de usuario de la aplicación y se pueden reutilizar en muchos módulos. Ahora que Compose se está convirtiendo en el valor predeterminado, podemos crear módulos solo de interfaz de usuario con dependencias de Compose y recursos de aplicaciones. Los componibles no necesitan saber clase ejecutiva. El proyecto KMM muestra el beneficio adicional al importar el módulo. Debido a que los recursos son independientes, la clase de vista de iOS solo los importa. Lo mismo ocurre con el sitio de Android, no se necesita el módulo común para un módulo solo de interfaz de usuario. Uso los recursos de Moko para mis proyectos de KMM. La biblioteca icerock devs brinda acceso a recursos en diferentes plataformas con soporte de localización estándar del sistema. Vamos a implementarlos paso a paso:

  • Cree un módulo separado para los recursos:

  • build.gradle debe contener el complemento de Icerock dev.icerock.mobile.multiplatform-resources y una función de extensión multiplatformResources que genera las clases de recursos. Además, debemos agregar la palabra clave api a la dependencia de la biblioteca (un resumen con un ejemplo completo).

complementos {kotlin («multiplataforma») id («com.android.library») id («dev.icerock.mobile.multiplatform-resources»)}

  • Después de agregar los recursos a commonMain/resources/MR/base, deberíamos estar listos para usarlos en todas partes. Descargo de responsabilidad: preste atención al nombre del directorio de recursos. Incluso si elegimos el nombre personalizado, el directorio debe llamarse MR
  • En este punto, Android funciona después de importar el nuevo módulo de recursos, pero iOS no lo ve en el marco generado. ¿Por qué?

El objetivo de iOS depende de la importación de KMM, que se comparte en mi caso. No quería agregar un marco adicional para pares de iOS, así que tuve que exponer los recursos para el módulo común. Para hacer esto, necesitamos modificar build.gradle del módulo compartido.

  • Agregue el complemento Icerock dev.icerock.mobile.multiplatform-resources y una función de extensión multiplatformResources que genera las clases de recursos. Además, necesitamos agregar una dependencia de la biblioteca API.

¿Suena familiar? Este es exactamente el mismo paso que hicimos anteriormente para el módulo de recursos compartidos. Verifique este núcleo para identificar cambios en el bloque Kotlin { }. El marco generado para el destino de iOS requiere recursos compartidos, que se exportan junto con la dependencia de recursos de Moko. El primero contiene clases generadas, mientras que el otro permite que iOS use una API de biblioteca específica. Junto con el complemento instalado y la función de extensión en el módulo común, este proyecto construirá iOS sin necesidad de cambios por parte de los desarrolladores de iOS. Creo que Kotlin Multiplatform es el framework que será ampliamente utilizado en el mundo móvil. Esto se debe a que el KMM es opcional y cada equipo puede comenzar a probar e implementar solo una parte. Los recursos son un ejemplo perfecto de cómo KMM puede reducir la cantidad de código duplicado en las plataformas móviles.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.