Les déclinaisons iOS et Android de Prodicle, une application proposée par Netflix aux équipes de production de contenu,
se servent désormais du SDK Kotlin Multiplatform Mobile

Kotlin Multiplatform Mobile (KMM) est un SDK pour le développement mobile multiplateforme, fourni par JetBrains. Il utilise les fonctionnalités multiplateformes de Kotlin et comprend divers outils et fonctionnalités conçus pour rendre l’expérience globale de création d’applications mobiles multiplateformes aussi plaisante et efficace que possible.

Les versions Android et iOS d’une application ont souvent beaucoup en commun, mais elles peuvent également présenter des différences significatives, en particulier au niveau de l’interface utilisateur. Ces différences sont plus ou moins importantes, pouvant aller de subtiles variations du comportement de défilement jusqu’à une logique de navigation complètement divergente. Pour autant, la logique métier de l’application, notamment en ce qui concerne les fonctionnalités de gestion des données, d’analyse et d’authentification, est souvent identique. C’est pourquoi il est naturel de partager certaines parties d’une application entre plusieurs plateformes tout en gardant d’autres parties complètement séparées.

Avec KMM, vous pouvez bénéficier de cette flexibilité tout en conservant les avantages de la programmation native. Utilisez une seule base de code pour la logique métier des applications iOS et Android et n’écrivez du code spécifique à la plateforme qu’en cas de nécessité, pour implémenter une interface utilisateur native ou lorsque vous travaillez avec des API spécifiques à la plateforme.

KMM s’intègre harmonieusement à votre projet mobile. Le code partagé, écrit en Kotlin, est compilé en bytecode JVM avec Kotlin/JVM et en binaires natifs avec Kotlin/Native. Vous pouvez donc utiliser vos modules de logique métier KMM comme n’importe quelle autre bibliothèque mobile standard.


Netflix entre dans le bain

Parmi les entités qui ont fait un retour d'expérience positif avec l'intégration de KMM figurent entre autres :
  • Quizlet qui a migré sa logique métier d’une approche JavaScript partagée vers KMM et a considérablement amélioré les performances de ses applications Android et iOS.
  • Fastwork qui a introduit KMM pour les couches domaine et données de son application afin de partager la logique métier et le service API entre les plateformes mobiles, ce qui a considérablement augmenté la productivité de son équipe.
  • Yandex.Disk qui a commencé avec l’intégration d’une petite fonctionnalité. Suite à la réussite de l’expérience, la société a implémenté toute sa logique de synchronisation des données dans KMM.

Cette fois-ci, Netflix a choisi de tenter l'expérience. Dans un billet de blog, Netflix explique :

« Au cours des dernières années, Netflix a développé une application mobile appelée Prodicle pour innover dans la production physique d'émissions de télévision et de films. Le monde de la production physique évolue rapidement et les besoins varient considérablement d'un pays, d'une région à l'autre et même d'une production à l'autre. La nature du travail signifie que nous développons des logiciels gourmands en écriture, dans un environnement distribué, sur des appareils où moins d'un de nos utilisateurs sur trois ont une connectivité très fiable lorsqu'ils sont sur le plateau, et avec une marge d'erreur limitée. Pour ces raisons, en tant que petite équipe d'ingénierie, nous avons constaté que l'optimisation de la fiabilité et de la rapidité de livraison des produits est nécessaire pour répondre avec succès aux besoins en constante évolution de nos clients.

« La forte probabilité d'une connectivité réseau non fiable nous a amenés à nous tourner vers des solutions mobiles pour une persistance robuste côté client et un support hors ligne. La nécessité d'une livraison rapide des produits nous a conduits à expérimenter une architecture multiplateforme. Nous allons maintenant plus loin en utilisant Kotlin Multiplatform pour écrire une fois dans Kotlin une logique métier indépendante de la plateforme et en compilant vers une bibliothèque Kotlin pour Android et un Universal Framework pour iOS via Kotlin / Native. »

Netflix rappelle que Kotlin Multiplatform Mobile aborde le développement mobile multiplateforme différemment de certaines technologies bien connues dans l'espace. Là où d'autres technologies font abstraction ou remplacent complètement le développement d'applications spécifiques à une plateforme, Kotlin Multiplatform est complémentaire aux technologies spécifiques à la plateforme existantes et vise à remplacer la logique métier indépendante de la plateforme. C’est un nouvel outil dans la boîte à outils par opposition au remplacement de la boîte à outils.

Les ingénieurs expliquent alors que cette solution leur convient pour plusieurs raisons :
  1. Nos applications Android et iOS ont une architecture partagée avec une logique métier similaire ou dans certains cas identique écrite sur les deux plateformes.
  2. Près de 50% du code de production de nos applications Android et iOS est découplé de la plateforme sous-jacente.
  3. Notre appétit pour explorer les dernières technologies offertes par les plateformes respectives (Android Jetpack Compose, Swift UI, etc.) n'est en aucun cas entravé.

Alors que font-ils de Kotlin Multiplatform Mobile ?


Gestion de l'expérience

« Comme indiqué précédemment, les besoins de nos utilisateurs varient considérablement d'une production à l'autre. Cela se traduit par un grand nombre de configurations d'applications pour activer la disponibilité des fonctionnalités et optimiser l'expérience intégrée à l'application pour chaque production. Découpler le code qui gère ces configurations des applications elles-mêmes permet de réduire la complexité à mesure que les applications se développent. Notre première exploration avec le partage de code implique la mise en œuvre d'un SDK mobile pour notre outil de gestion d'expérience interne, Hendrix.

« À la base, Hendrix est un langage interprété simple qui exprime comment les valeurs de configuration doivent être calculées. Ces expressions sont évaluées dans le contexte de session d'application actuelle et peuvent accéder à des données telles que les affectations de test A / B, la localité, les attributs de l'appareil, etc. Pour notre cas d'utilisation, nous configurons des ensembles de fonctionnalités de l'application comme la disponibilité de la production, de la version et de la région.

Une mauvaise connectivité réseau associée à des valeurs de configuration changeant fréquemment en réponse à l'activité de l'utilisateur signifie que l'évaluation des règles sur l'appareil est préférable à l'évaluation côté serveur.

Cela nous a conduits à créer un SDK mobile Hendrix léger - un excellent candidat pour Kotlin Multiplatform, car il nécessite une logique métier importante et est entièrement indépendant de la plateforme.

La mise en œuvre

Par souci de concision, l'équipe a sauté les détails spécifiques à Hendrix et a abordé certaines des différences impliquées dans l'utilisation de Kotlin Multiplatform à la place de Kotlin / Swift.

Build

Pour Android, il n'y a pas de changement. Le Kit de développement logiciel (SDK) Hendrix Multiplatform est importé via gradle en tant que dépendance de projet de bibliothèque Android de la même manière que toute autre dépendance. Du côté iOS, le binaire natif est inclus dans le projet Xcode en tant qu'Universal Framework.

Ergonomie du développeur

Le code source Kotlin Multiplatform peut être édité, recompilé et peut avoir un débogueur attaché avec des points d'arrêt dans Android Studio et Xcode (y compris la prise en charge de lldb). Android Studio est prêt à l'emploi, la prise en charge de Xcode est assurée via le plugin xcode-kotlin de TouchLabs.


Débogage du code source Kotlin à partir de Xcode

La mise en réseau

Hendrix interprète la ou les règles du jeu : des fichiers configurables à distance qui sont téléchargés sur l'appareil. Les ingénieurs Netflix se servent de HttpClient multiplateforme de Ktor pour intégrer le code réseau dans le SDK.

Cache disque

Bien entendu, la connectivité réseau peut ne pas toujours être disponible. Les ensembles de règles téléchargés doivent donc être mis en cache sur le disque. Pour cela, l'équipe utilise SQLDelight avec ses pilotes Android et Native Database pour la persistance multiplateforme.

Conclusion

« Nous avons suivi de près l’évolution de Kotlin Multiplatform ces dernières années et nous pensons que la technologie a atteint un point d’inflexion. Les intégrations d'outils et de systèmes de construction pour Xcode se sont considérablement améliorées, de sorte que les complexités impliquées dans l'intégration et la maintenance sont compensées par l'avantage de ne pas avoir à écrire et à maintenir plusieurs implémentations spécifiques à la plateforme.

« Les opportunités de partage de code supplémentaire entre nos applications Android et iOS sont nombreuses. Les futures applications potentielles de la technologie deviennent encore plus intéressantes si l'on considère que la transpilation Javascript est également possible.

« Nous sommes enthousiastes à l'idée de pouvoir faire évoluer nos applications mobiles de studio en couches minces d'interface utilisateur avec une logique métier partagée et continuerons de partager nos connaissances avec vous tout au long de ce voyage ».

En savoir plus sur les technologies de production Netflix

Source : Netflix

Voir aussi :

Google prévoit de fermer la faille qui permet à Netflix, Spotify et Tinder d'éviter de payer sa taxe de 30 % sur les applications, et facilitera l'installation d'autres app stores sur les appareils
Reed Hastings s'exprime sur le salaire élevé des ingénieurs en logiciel de Netflix, « Nous nous sommes concentrés sur la recherche des meilleurs sur le marché », a déclaré le PDG de l'entreprise
Des chercheurs obtiennent la vitesse d'Internet la plus rapide jamais atteinte, qui permettrait de télécharger l'intégralité de Netflix en une seconde
Pour l'année 2019, Netflix a payé seulement un demi-million d'euros d'impôts en France pour un chiffre d'affaires estimé à plus de 800 millions d'euros