La prochaine étape du développement multiplateforme avec Trikot

Small d1999b5a716046f68b01f02f7af29c0512532ffdc711d3c5668c017e57d3c40b
Par Martin Gagnon
Directeur, développement mobile

En matière de développement, l’équipe de Mirego privilégie et a toujours privilégié la qualité et la création d'expériences remarquables. La fluidité, la performance, l’ergonomie, le respect des lignes directrices de la plateforme ainsi que la maintenabilité sont tous des facteurs qui sont priorisés lorsque nous effectuons des choix technologiques. 

Livrer des produits de haute qualité exige d’adapter et de peaufiner tout autant le visuel et la navigation que la gestion des tâches d’arrière-plans pour chacune des plateformes auxquelles ces produits sont destinés. Pour cette raison, nous prônons une approche « native first ».

Au cours des six dernières années, nous avons développé une expertise pour le partage de code entre les plateformes mobiles, web et télé, tout en maximisant l’expérience utilisateur à l’aide de Scratch, une librairie maison qui utilise le traducteur Java à Objective-C de Google (j2objc) et le traducteur Java à Javascript (j2js) de Mirego. À ses débuts, Scratch se limitait au traitement et à l’assemblage des données reçues des serveurs. Au fil du temps, la librairie a grandi vers un « framework » qui permet la programmation réactive en Java sur des plateformes mobile et web.

Aujourd’hui, grâce à Scratch, nous pouvons réduire les coûts de développement et de maintenance des applications, tout en conservant toutes les qualités des applications natives. Cependant, au cours des dernières années, les environnements natifs ont évolué. Depuis nos débuts avec Scratch, Apple a fait de Swift son langage de prédilection pour ses plateformes, Google a retenu Kotlin pour Android et les fonctionnalités Javascript offertes dans les navigateurs se sont beaucoup améliorées.

En 2018, nous avons entrepris de réévaluer nos options pour le développement multiplateforme. Les principales technologies émergentes de l’époque, comme React Native et Flutter, ont été écartées pour des raisons de performance et de maturité, ou parce qu’elles ne nous permettaient pas d’adapter nos applications à toutes les plateformes. La plupart de ces solutions introduisaient un autre langage de programmation, donc un environnement de développement supplémentaire, et du même coup plus de complexité dans l’interaction entre plateformes. Comme Airbnb le mentionnait, cette contrainte est très présente lors du développement de composantes natives dans des projets React Native par exemple.

Kotlin Multiplateform, développé par la communauté Kotlin avec le support de JetBrains et Google, permettait quant à lui de conserver l’ensemble des acquis de Scratch, tout en favorisant une interaction facile et naturelle avec Swift et JavaScript. Les stratégies de nos clients prévoient la plupart du temps le déploiement de nos produits sur plusieurs plateformes, allant même au-delà du mobile. Kotlin Multiplateform nous permet d’étendre ces produits nativement à iOS, tvOS, iPadOS, Android, Android TV, Web, WebAssembly, Windows, macOs et Linux, tout en assurant un comportement identique pour le code commun à toutes les plateformes.

Kotlin étant le langage natif pour Android, nous pouvons créer et valider les fonctionnalités de manière naturelle et transparente avant de les intégrer sur les autres plateformes. À cela s’ajoute le support de Kotlin Multiplateform directement dans AppCode, un des IDE de JetBrains, qui permet le développement Swift et Kotlin en parallèle. Offrant une solution de beaucoup plus bas niveau que les autres solutions, Kotlin Multiplateform, comme j2objc, exige que l’équipe de Mirego développe une librairie de plus haut niveau afin d’accélérer le développement d’applications multiplateformes. Notre équipe nomme cette nouvelle librairie Trikot.

En vue d’atteindre nos objectifs et de livrer nos premiers produits numériques à l’aide de Trikot, le code partagé entre les plateformes doit être importé par le code natif. C’est le code natif qui forme l’enveloppe de l’application. À l’intérieur se trouve notre librairie, Trikot, qui constitue l’interface entre les fonctionnalités de la plateforme et la librairie de code partagé formant le noyau. Toutes les règles d’affaires communes à toutes les plateformes de l’application sont contenues dans ce noyau. L’ensemble de la gestion des flux entre les différents modules de l’application, natifs ou non, passe par Trikot. Pour ce faire, la première partie de Trikot que nous avons développée implémente en partie l’API de Reactive Streams sur Kotlin Multiplateform. Nos experts de plateformes peuvent ainsi optimiser les interfaces utilisateurs et les services nécessaires à l’application, par exemple l’accès GPS, les requêtes web, la communication bluetooth, le cryptage de données et les tâches d’arrière-plans pour chacune des plateformes.

Les technologies relatives au développement de produits numériques évoluent excessivement rapidement. Nos produits doivent suivre ce rythme effréné pour continuer d’évoluer. En séparant le plus possible la logique d’affaires de l’expérience de la plateforme, nous nous assurons que les produits que nous créons pourront profiter immédiatement des avancées de chacune des plateformes prises en charge par Kotlin Multiplateforme.

Aujourd’hui, nous sommes fiers de franchir une autre étape dans l’adoption de Kotlin Multiplateforme et de contribuer à la communauté avec le premier module de Trikot: Trikot.streams.