Introducción: Kotlin Multiplatform y Compose Multiplatform prometen una experiencia write once run everywhere pero en la práctica existen huecos de dependencias que obligan a soluciones específicas por plataforma. En Q2BSTUDIO, empresa especializada en desarrollo de software a medida, aplicaciones a medida, inteligencia artificial y ciberseguridad, hemos abordado estos retos en proyectos reales y compartimos una propuesta práctica para reducir la repetición de código y mantener una arquitectura limpia.
El problema: muchas librerías diseñadas para Kotlin Multiplatform cubren iOS, Android y JVM pero dejan fuera a Wasm y en ocasiones a Desktop, lo que provoca errores de resolución en Gradle al compilar objetivos Wasm o Desktop. Un ejemplo típico es usar un SDK como RevenueCat desde commonMain y recibir un error Could not resolve para los targets Wasm y Desktop. La solución inmediata suele ser crear actuals duplicados para iOS, Android y Desktop, pero eso genera código repetido y dificulta el mantenimiento.
Mecanismo expect actual: la forma correcta de manejar diferencias de plataforma en KMP es definir la API común con expect en commonMain y proporcionar implementaciones específicas con actual en los módulos de plataforma. Sin embargo, obligar a escribir actuals en cada target sin una estrategia modular lleva a duplicación. Nosotros proponemos una estructura modular que agrupe implementaciones por afinidad de plataforma, reduciendo la repetición y mejorando la claridad del proyecto.
Solución basada en módulos Gradle: creamos módulos dedicados que actúan como source roots para grupos de plataformas. Por ejemplo, para una librería como Room Database que funciona en iOS, Android y Desktop JVM, se puede crear un módulo mobileModule donde alojar los actuals específicos para iOS y Android y un módulo nonWasmModule para Desktop y otras plataformas que no incluyan Wasm. En el caso de Wasm, donde muchas librerías no están disponibles, se puede ofrecer una alternativa ligera basada en localStorage del navegador o en implementaciones específicas de Wasm.
Cómo implementarlo paso a paso: 1 Definir expect en commonMain cubriendo la API común. 2 Crear mobileModule con los actuals para iOS y Android; marcar el directorio como source root en Gradle. 3 Crear nonWasmModule con el actual único que cubra JVM y Desktop; para Wasm ofrecer una implementación alternativa o un stub que use localStorage. 4 Actualizar el build Gradle de la app para que mobileModule y nonWasmModule dependan del módulo common, heredando dependencias compartidas. Con esto se evita repetir actuals iguales en varios targets y se mejora la escalabilidad del código.
Ejemplo práctico: si Room funciona en iOS, Android y Desktop, pones la implementación común en commonMain y un solo actual en nonWasmModule para JVM/Desktop; en mobileModule incluyes adaptaciones específicas de Android e iOS. Para Wasm puedes crear un actual que traduzca operaciones de persistencia a localStorage o indexedDB evitando errores de resolución y permitiendo builds exitosos en el target Wasm.
Buenas prácticas y recomendaciones: usar nombres de módulos claros como mobileModule o nonWasmModule para facilitar la navegación, documentar qué plataformas cubre cada módulo, mantener los actuals mínimos y delegar lógica compleja a la capa común siempre que sea posible. Revisar las dependencias de librerías KMP antes de integrarlas y preparar adaptadores para objetivos no compatibles reduce sorpresas en CI y en compilaciones multiplataforma.
Beneficios para tu empresa: esta estrategia ayuda a mantener una base de código más limpia y reduce el esfuerzo de mantenimiento, especialmente en proyectos que requieren funcionalidades avanzadas como agentes IA o integración con servicios cloud. En Q2BSTUDIO combinamos estas técnicas con soluciones de inteligencia artificial para empresas y servicios cloud aws y azure para ofrecer proyectos robustos y escalables.
Servicios vinculados: si necesitas ayuda para migrar o diseñar arquitecturas multiplataforma, en Q2BSTUDIO podemos acompañarte desde la definición técnica hasta la entrega. Ofrecemos desarrollo de aplicaciones a medida y software a medida adaptado a exigencias de negocio y seguridad, así como soluciones de inteligencia artificial y ciberseguridad. Conecta con nuestras capacidades en desarrollo a medida visitando desarrollo de aplicaciones y software a medida en Q2BSTUDIO o conoce nuestras propuestas de IA en servicios de inteligencia artificial para empresas.
Conclusión: Compose Multiplatform y Kotlin Multiplatform son poderosas pero requieren organización y una estrategia modular para cubrir huecos de dependencias. La creación de módulos dedicados como mobileModule y nonWasmModule y el uso correcto de expect actual permiten reducir la duplicación y ofrecer builds estables para Android, iOS, Desktop y Web. En Q2BSTUDIO combinamos estas prácticas con experiencia en inteligencia de negocio, power bi, agentes IA y ciberseguridad para entregar soluciones completas y seguras.