SwiftUI : pour les interfaces iOS et tous les appareils Apple
SwiftUI a été annoncé par Apple en juin 2019 lors de la conférence WWDC 2019 comme étant une boîte à outils d’interface utilisateur qui permet de concevoir des applications de manière déclarative. En d’autres termes, vous n’aurez qu’à commander la façon dont vous voulez que votre interface utilisateur apparaisse et fonctionne, et SWIFTUI vous exaucera en se chargeant d’exécuter vos commandes pour avoir le rendu voulu. Afin de développer au mieux vos applications.
SwiftUI agit comme une interface utilisateur multi-plateformes. En gros, il permet de créer de superbes applications sur toutes les plateformes de l’écosystème Apple: iOs, ipadOs, TvOs, WatchOs et MacOs.
Ayant pour slogan “Better Apps. Less code”, SwiftUI se présente aux développeurs iOS comme une nouvelle façon de développer plus rapidement avec moins de code.
SwiftUI c’est quoi?
Historiquement, on développait les applications iOS avec le Storyboard: c’est un outil visuel qui recourt au glisser-déposer. Bien que relativement pratique, l’utilisation posait plusieurs problèmes d’utilisabilité, de praticité et d’intuitivité.
Tout d’abord, les vues étaient générées dans un fichier XML qui est assez difficile à versioner. Cela impliquait la nécessité de faire des allers-retours fréquents entre le code et le storyboard, et les vues n’étaient accessibles qu’une fois ouvertes dans un simulateur d’iPhone, qui n’était pas des plus rapides à se lancer.
Face à ces inconvénients, le besoin était clair: une solution code First, utilisant du code Swift tout en étant déclaratif. Et c’est à partir de là que SwiftUI est entré en jeu.
Le toolkit SwiftUI est un framework multi-plateformes qui permet de concevoir des applications de manière déclarative sur les plateformes iOs, ipadOs, TvOs, WatchOs et MacOs.
Ainsi, il permet de grouper les vues en différents sous-groupes (qu’on appelle Stack) qui rendent le code déclaratif et considérablement plus facile à maintenir. Et ce qui est d’autant plus génial, c’est que SwiftUI permet d’avoir un aperçu direct de ce à quoi va ressembler l’application qu’on développe dans un encart dédié juste à côté du code qui s’appelle Canvas; le code et l’affichage de l’aperçu se font alors à la même place. Plus besoin de simulateur ou de faire ces allers-retours qui prêtent à confusion et qui multiplient les erreurs.
SwiftUI est le framework de choix pour tout développeur iOS. Natif sur toutes les plateformes, il est spécialement conçu pour pouvoir faire fonctionner la même application sur iOS, iPadOS, WatchOS, TvOS, macOS. C’est un élément clé pour offrir les meilleures expériences utilisateurs possibles à tous, sur n’importe quel appareil Apple, en utilisant un seul ensemble d’outils et d’API.
Il suffit alors d’effectuer quelques ajustements de manière très simple pour les adapter aux différentes plateformes. Sans aucun effort de votre part ou soucis d’adaptation, les fonctionnalités vont se transposer directement aux exigences des différentes plateformes de façon native.
SwiftUI est disponible depuis iOS 13, macOS 10.15, tvOS 13 et watchOS 6, ou toute autre version ultérieure de ces plateformes. Il permet notamment de faire du live coding c’est-à-dire qu’il vous sera possible de coder et voir le résultat en direct dans l’interface même. Pour bénéficier de cette option, il doit être associé à Xcode 11 qui est l’environnement d’Apple pour développer avec SwiftUI et il nécessite la version de MacOS Catalina.
Le fait que SwiftUI soit parfaitement intégré à Xcode 11 est un réel avantage, puisque Xcode inclut des outils de conception intuitifs qui rendent la conception d’interfaces avec SwiftUI beaucoup trop simple. Lorsque vous travaillez dans le canevas de conception, tout ce que vous modifiez est complètement synchronisé avec le code présent sur l’éditeur adjacent. Le code est instantanément visible sous forme d’aperçu au fur et à mesure que vous l’écrivez, et toute modification que vous apportez à cet aperçu apparaît immédiatement dans votre code. Xcode recompile instantanément les modifications et les insère dans une version exécutable de votre application – visible et modifiable à tout moment.
Comment SwiftUI fonctionne concrètement?
Vous l’aurez compris, l’association parfaite de Xcode à SwiftUI apporte au framework SwiftUI des nouveautés attrayantes :
- Des expériences et outils d’application avancés qui permettent d’améliorer vos applications avec de nouvelles fonctionnalités, telles que des vues de liste améliorées, de meilleures expériences de recherche et la prise en charge des zones de contrôle.
- Gagner plus de contrôle sur les primitives de dessin avec la nouvelle API Canvas, qui est un équivalent moderne de drawRect accéléré par GPU. Le Canvas permet de prévisualiser directement ses solutions et les changement opérés, avec la possibilité de dialyser le UI sur plusieurs Devices,
- Améliorations de l’accessibilité en accélérant les interactions. SwiftUI permet d’exposer les éléments les plus pertinents sur un écran dans une liste simple à l’aide de la nouvelle API Rotor. Le focus d’accessibilité présentement existant, tel que le curseur VoiceOver, peut désormais être lu et même modifié par programmation. Et avec le nouvelle fonctionnalité Accessibility Representation API, les contrôles personnalisés héritent facilement de la prise en charge complète de l’accessibilité des contrôles standards SwiftUI existants.
- Les nouvelles améliorations de SwiftUI sur macOS optimisent les performances et la disponibilité des API, y compris la prise en charge des tableaux multi colonnes, rendant vos applications macOS encore meilleures.
- Prise en charge de Always-On Retina Display: Sur Apple Watch Series 5 et les versions ultérieures, l’écran Always-On Retina permet aux applications watchOS de rester visibles, même lorsque le cadran de la montre est grisé, rendant les informations clés disponibles en un coup d’œil.
- Widgets pour iPadOS: Désormais, les widgets peuvent être placés n’importe où sur l’écran d’accueil et étendus à une nouvelle taille de widget extra-large.
Et des fonctionnalités de design avantageuses:
- Le mode glisser déposer sert à organiser les composants dans votre interface utilisateur en faisant simplement glisser les commandes sur le canevas. Cliquez pour ouvrir un inspecteur afin de sélectionner la police, la couleur, l’alignement et d’autres options de conception, et réorganisez facilement les commandes avec votre curseur. Beaucoup de ces éditeurs visuels sont également disponibles dans l’éditeur de code, vous pouvez donc utiliser des inspecteurs pour découvrir de nouveaux modificateurs pour chaque contrôle, même si vous préférez coder manuellement les parties de votre interface. Vous pouvez également faire glisser des contrôles depuis votre bibliothèque et les déposer sur le canevas de conception ou directement sur le code.
- Remplacement dynamique. Le compilateur et l’environnement d’exécution Swift sont entièrement intégrés à Xcode, de sorte que votre application est constamment construite et exécutée. Le canevas de conception que vous voyez n’est pas seulement une approximation de votre interface utilisateur – c’est votre application en temps réel.
- Les Previews permettent d’observer et de tester les changements instantanément. Vous pouvez désormais créer un ou plusieurs aperçus de n’importe quelle vue SwiftUI pour obtenir des exemples de données et configurer presque tout ce que vos utilisateurs peuvent voir, comme les grandes polices, les localisations ou le mode sombre. Les aperçus peuvent afficher votre interface utilisateur sur n’importe quel appareil et dans n’importe quelle orientation sans avoir à faire de nouveau build de l’application.
Pour faire court, tout devient plus intuitif avec SwiftUI. Et c’est le style déclaratif de SwiftUI fait toute sa force. Vous pouvez simplement décrire ce que votre interface utilisateur doit faire et vous l’aurez. Ce style déclaratif s’applique même à des concepts complexes comme l’animation. Il est possible d’ajouter facilement une animation à presque n’importe quel contrôle et de choisir une collection d’effets prêts à l’emploi avec seulement quelques lignes de code.
Au moment de l’exécution, le système gère toutes les étapes nécessaires pour créer un mouvement fluide et gère même les interruptions afin de maintenir la stabilité de votre application.
Pour mieux comprendre le fonctionnement de SwiftUI, nous allons nous concentrer sur une comparaison de la programmation impérative par rapport au paradigme déclaratif qu’utilise SwiftUI.
Le style déclaratif de SwiftUI VS le style impératif:
Zoom sur la programmation impérative
Un élément fondamental distingue le type de programmation impératif du déclaratif: Si le paradigme impératif se concentre sur le déroulement, le déclaratif se focalise sur l’objectif.
Qu’est-ce que cela signifie ? Le paradigme de programmation impérative est rédigé sous la forme d’un mode d’emploi étape par étape (déroulement) à suivre par l’ordinateur. Il décrit explicitement la séquence d’étapes à exécuter pour parvenir à la solution souhaitée.
La programmation déclarative, à l’inverse, décrit directement le résultat final souhaité (objectif), en s’appuyant sur un algorithme qui recherche et applique automatiquement les méthodes appropriées. La procédure déclarative jouit de nombreux avantages : non seulement l’écriture des programmes est beaucoup plus rapide, mais en plus, les applications peuvent ensuite être facilement optimisées. Lorsqu’une nouvelle méthode est mise au point, les instructions abstraites du code source permettent à l’algorithme d’y avoir facilement recours.
L’interface utilisateur déclarative est alors mieux comprise par rapport à l’interface utilisateur impérative qu’utilisaient les développeurs avant iOS 13.
D’un autre côté, l’interface utilisateur impérative possède des désavantages qui lui sont propres, Dans une interface utilisateur impérative, nous ne pouvions appeler une fonction que lorsqu’un bouton a été cliqué, et à l’intérieur de la fonction, nous lisions une valeur et affichions une étiquette – nous modifions alors régulièrement le visuel et le fonctionnement de l’interface utilisateur en fonction de ce qui se passe.
La plupart des désavantages tournent alors autour des valeurs/états où nous stockons le code. Nous devons suivre ces valeurs dans lesquelles se trouve notre code et nous assurer que notre interface utilisateur les reflète correctement. De fait, l’un des plus gros désavantages du paradigme de programmation impérative est que le gros volume embrouille la clarté du code. Ce dernier prend rapidement de l’ampleur et c’est un réel frein lorsqu’il s’agit de résoudre des problèmes plus complexes.
Par exemple, si nous avons un écran avec une propriété booléenne qui affecte l’interface utilisateur, nous avons deux états : le booléen peut être soit activé ou désactivé. Si nous avons deux propriétés booléennes, A et B, nous avons maintenant quatre états :
A est éteint et B est éteint
A est allumé et B est éteint
A est éteint et B est allumé
A est allumé et B est allumé
Jusque là pas de soucis, mais si on avait trois booléens? Ou huit? Ou des entiers, des chaînes, des dates, etc. ? Il faut avouer que ça devient facilement un casse-tête et la complexité monte très vite en crescendo.
De plus, et en considérant que l’exécution du code s’entremêle avec la programmation et qu’aucune séparation claire ne fait office, (contrairement au style déclaratif), cela engendre une multitude d’effets secondaires indésirables et multiplie les erreurs survenant en cas de remaniements ultérieurs.
La syntaxe déclarative démarquant SwiftUI
En revanche, le UI déclaratif nous permet d’informer iOS sur tous les états possibles de notre application à la fois. Nous n’avons pas besoin d’écrire du code pour passer d’un état à l’autre.
Au lieu de cela, nous laissons SwiftUI passer d’une disposition d’interface utilisateur à une autre lorsque l’état change. Le point fort des langages de programmation déclaratifs à l’instar de SwiftUI c’est qu’ils obtiennent en quelques mots ce que la programmation impérative nécessite de décrire en de nombreuses lignes de code source.
Par exemple, si nous lui avons déjà dit quoi afficher selon que l’utilisateur se connecte ou se déconnecte, alors SwiftUI peut mettre à jour l’interface utilisateur en notre nom lors de la modification de l’état d’authentification.
C’est là la signification de la programmation déclarative: Il n’est plus nécessaire d’afficher et de masquer les composants à la main. Avec SwiftUI, nous renseignons simplement toutes les règles que nous voulons appliquer et le laissons les appliquer automatiquement et conformément à ces règles.
Cela signifie qu’avec SwiftUI, vous pouvez désormais apprendre un langage et un framework de mise en page, puis déployer votre code n’importe où. Cela aura l’avantage de vous faire gagner du temps sur les fonctionnalités basiques pour que vous puissiez vous concentrer sur les fonctionnalités sensationnelles, qui feront la singularité et le succès de votre App.
Le paradigme déclaratif utilisé en SwiftUI, et bien à l’inverse du code impératif, rend également très facile l’insertion d’extensions dans le code, étant donné qu’il existe des méthodes permettant d’en rajouter de manière séparée. SwiftUI permet également d’intégrer facilement vos différents composants comme du text fill, des listes dynamiques, des pickers et pleins d’autres.
Ainsi, l’approche déclarative SwiftUI va nous permettre d’écrire un code beaucoup plus lisible et beaucoup plus rapide à développer, vous faisant gagner en temps et en efforts de maintenance.
Conclusion:
SwiftUI est le futur du développement pour les interfaces iOS et macOS et tous les appareils Apple. Il est donc primordial pour tout développeur iOS de l’apprendre et de le maîtriser.
Il faut cependant tenir compte du fait que les applications en SwiftUI sont au minimum sous iOS 13 et que des millions d’applications sont déjà présentes sur l’AppStore en Swift/Objective C et UIKit.
Pour cela, vos futurs employeurs vous demanderont sûrement de maintenir des applications avec UIKit.
Même si SwiftUI est sur le bon chemin pour remplacer voire détrôner complètement UIKit d’ici quelques années, nous sommes encore en période transitoire et il vous faudra donc maîtriser les deux.