Spark est l’une des applications de messagerie les plus populaires disponibles gratuitement sur iPhone, iPad, Mac et Apple Watch. Pour les millions d’utilisateurs de la plate-forme Android, le moment où Spark vous aide à aimer votre e-mail n’est pas très loin. En attendant, nous voulons partager avec vous une nouvelle chaîne d’outils incroyable que nous avons créée qui élimine la douleur et les tracas liés au travail avec Swift pour Android. Cette chaîne d’outils aide les équipes de développement à utiliser le code qu’elles ont écrit pour les plates-formes iOS ou Mac pour créer d’excellentes applications Android.

Le compilateur Swift d’Apple a la capacité de compiler du code pour la plate-forme Android depuis quelques années, mais il ne s’est pas fait beaucoup d’amis dans la communauté des développeurs en raison de sa complexité. Notre chaîne d’outils a été conçue pour résoudre ce problème en éliminant la complexité et les maux de tête du processus, afin que vous puissiez vous concentrer sur la création d’excellentes applications pour vos utilisateurs.

Lorsque nous avons commencé à travailler sur le développement de la version Android de Spark, nous recherchions un langage multiplateforme qui pourrait être utilisé à la fois pour le développement Android & iOS et serait également facile à migrer à partir de notre base de code Objective-C existante.

C’est à cette époque que Swift est devenu un projet open-source et après un court moment, il a également eu la possibilité de compiler du code pour la plate-forme Android. Nous avons exploré nos options et il était assez évident pour nous que nous devions aller dans cette direction.

Comment fonctionne le compilateur Swift Android?

La réponse à cela est simple: Machine virtuelle de bas niveau.

Le LLVM est une infrastructure de compilateur basée sur les concepts de conception triphasée avec re-ciblabilité. En termes simples, cela signifie que n’importe quel langage doté d’un compilateur LLVM frontal peut être compilé pour n’importe quelle cible dotée d’un compilateur backend LLVM.

Google utilise déjà les compilateurs LLVM pour le développement Android natif avec C / C ++. C’est pourquoi, du point de vue des appareils Android, il n’y a aucune différence dans les bibliothèques compilées à partir de code C / C ++ ou Swift. De plus, c’est en fait mieux pour les développeurs, car ils peuvent réutiliser la plupart des instruments créés pour le développement C / C ++ – outils de profilage Android ou un débogueur de bas niveau Android (avec une limitation de l’évaluation du code swift).

Quels cadres sont disponibles ?

Eh bienthere il n’y en a pas beaucoup. Nous n’avons accès qu’à SwiftCore, Dispatch et SwiftFoundation dans notre chaîne d’outils. SwiftCore et Dispatch sont en grande partie identiques aux versions iOS et Mac. Mais SwiftFoundation, d’un autre côté, n’est pas la même base qu’Apple utilise pour ses propres plates-formes; c’est une ré-implémentation de toutes les classes de la bibliothèque d’origine. C’est pourquoi il manque encore certaines fonctionnalités à SwiftFoundation, mais il couvre tous les besoins de base tels que l’exécution de requêtes réseau, l’analyse JSON / XML, le stockage de données sur disque, etc.

De toute évidence, UIKit ou tout framework de haut niveau ne sont pas disponibles, de sorte que votre application Swift pour iOS ne peut pas fonctionner comme par magie sur Android – vous pouvez utiliser Swift pour le code de logique métier— mais vous devrez réécrire toutes les parties dépendantes de l’interface utilisateur et du système d’exploitation spécifiquement pour Android.

Quelles sont les limites du compilateur Android Swift?

  • Pour le moment, le compilateur Swift ne prend en charge que la plate-forme Android ARM-v7A.
  • La version minimale d’Android prise en charge est la v5.0 (Lollipop).
  • Et l’une des limitations les plus importantes est la génération de fichiers APK de 32 Mo +, car la construction doit inclure SwiftCode, SwiftFoundation et libDispatch.

Présentation de la chaîne d’outils Android Swift

L’un des plus gros obstacles à l’utilisation du compilateur Swift pour Android est le manque de support officiel d’Apple, ce qui signifie aucune intégration continue ou aucune construction officielle. Nous avons réalisé que nous pouvions optimiser les nombreux tracas présents dans le développement de Swift pour Android et en même temps, améliorer l’expérience de nos développeurs dans ce domaine. Nous voulions éviter tous les maux de tête que les développeurs Android doivent généralement subir lorsqu’ils travaillent avec ces outils.

C’est pourquoi nous avons la chaîne d’outils Android Swift — une collection d’outils qui donne aux développeurs Android la possibilité d’utiliser Swift dans leurs projets confortablement et sans tracas. Il s’agit d’un projet open source basé sur le compilateur Apple Swift et les projets SwiftJava et SwiftAndroid. Vous pouvez télécharger la chaîne d’outils directement depuis Bintray (Mac uniquement) ou compiler vous-même depuis GitHub.

Nous utilisons actuellement une version fourchue de Swift. Notre fork contient une option pour désactiver @objc et les fonctionnalités dynamiques dans le compilateur car il ne fonctionne pas correctement sur des plates-formes non Darwin. Il contient également quelques corrections mineures. Nous travaillons sur la possibilité d’utiliser le référentiel Swift officiel à l’avenir.

De plus, nous utilisons le gestionnaire de paquets Swift (SPM) comme système de construction pour Swift. C’est le système de construction qu’Apple utilise dans le compilateur et d’autres bibliothèques Swift. Cet outil permet de connecter des dépendances, de compiler du code, de lier des artefacts (bibliothèques dynamiques ou exécutables) et d’exécuter des tests. En plus de notre chaîne d’outils, nous fournissons des scripts pour SPM qui automatiseront tous les processus de développement et de test des applications Android.

Plugin Gradle

Bien sûr, il est génial de créer du code Swift à partir de la ligne de commande, mais il est tout simplement plus naturel pour les développeurs Android d’utiliser l’E Android Studio. Heureusement, l’E Android utilise un système de construction très flexible appelé « Gradle ».

Nous avons créé un plugin Gradle pour ajouter une étape de compilation Swift. Cela nous donne la possibilité de créer des projets mixtes Swift / Java / Kotlin avec un seul bouton.

Interopérabilité JVM

Toutes les applications Android s’exécutent sur la machine virtuelle Java. Dans le cas où un développeur préfère le code natif (C / C ++), il doit charger la bibliothèque dans une application et interagir avec elle via l’interface native Java (JNI). Swift ne fait pas exception. Ainsi, pour utiliser du code Swift dans la JVM, nous devons charger les bibliothèques et écrire un pont JNI.

C’est à vous de décider quel langage JVM (Java ou Kotlin) vous utilisez et comment vous écrivez le code de pontage, mais nous vous recommandons de jeter un coup d’œil à notre processeur d’annotation Swift qui génère tout le code JNI à partir des classes et interfaces Java.

Projet Blueprint

L’équipe Android de Readdle a créé un exemple d’application Swift pour essayer la chaîne d’outils Android Swift en action. Si vous voulez essayer Swift pour Android, c’est un excellent projet pour commencer. Le projet Blueprint est une application simple à faire avec une logique métier écrite en Swift, tandis que l’interface utilisateur a été réalisée en Java.

Testing

Le projet Swift inclut déjà un framework de test appelé XCTest et il peut déjà être utilisé pour tester le code Swift sur la plate-forme Android. Le gestionnaire de paquets Swift permet de compiler des tests dans un exécutable binaire fat; après cela, les développeurs peuvent télécharger un exécutable binaire sur des appareils Android et l’exécuter via le shell Android.

BONUS : Notre chaîne d’outils automatise toutes les étapes de ce processus de test. Et le projet Blueprint comprend quelques tests simples à essayer.

Et après ?

Nous avons encore beaucoup à faire pour la chaîne d’outils Swift:

  • Compilateur ARM64 (date limite provisoire : août 2019)
  • Compilateur X86, X86_64 (prise en charge des Chromebooks)
  • LLDB avec prise en charge de Swift: client et serveur

Nous espérons que notre chaîne d’outils Android Swift vous aidera à rendre votre processus de développement facile et sans tracas. Le langage Swift a beaucoup évolué au cours des deux dernières années et les développeurs qui codent déjà pour les plates-formes iOS et Mac utilisant Swift peuvent désormais facilement avoir Android sur leur radar.

Sources

  1. Mise en route avec Swift sur Android https://github.com/apple/swift/blob/master/docs/Android.md
  2. L’architecture des applications Open Source: LLVM http://www.aosabook.org/en/llvm.html
  3. Swift Android Toolchain https://github.com/readdle/swift-android-toolchain
  4. Swift Android Buildtools https://github.com/readdle/swift-android-buildtools
  5. Gradle plugin for building Swift code for Android https://github.com/readdle/swift-android-gradle
  6. Swift Java Code generation annotation processor https://github.com/readdle/swift-java-codegen
  7. Swift Android Blueprint project https://github.com/readdle/swift-android-architecture

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.