Ouvrir le menu principal

MacGeneration

Recherche

Développeurs : les petites nouveautés de Swift 4.2, en attendant Swift 5

Nicolas Furno

samedi 30 juin 2018 à 10:00 • 70

Logiciels

Pour la première fois depuis la présentation initiale de Swift à la WWDC 2014, Apple n’a pas présenté de mise à jour majeure à sa conférence dédiée aux développeurs. La cinquième version de Swift a bien été évoquée à la WWDC 2018, mais elle sortira l’année prochaine. Un retard par rapport au planning initial qui prévoyait un lancement cette année. Pour autant, les développeurs ne sont pas repartis bredouilles de San José.

La première bêta de Swift 4.2 a été publiée dans la foulée de la conférence et cette version contient plusieurs nouveautés détaillées dans une session de la WWDC 2018. Petit tour d’horizon rapide de ce qui va changer dès la rentrée avec Swift 4.2, et surtout en 2019 avec Swift 5.

Swift 4.2, une étape de parcours pour aider les développeurs

Même si elle a le numéro de version d’une mise à jour mineure, Swift 4.2 est une version importante, a clairement expliqué Apple pendant la session dédiée à son langage de développement. Néanmoins, cela ne se verra pas forcément, puisque c’est avant tout une étape significative vers Swift 5 qui sortira dans un deuxième temps. Précisons encore que cette mise à jour est actuellement bêta et qu’elle sera finalisée en même temps que toutes les autres nouveautés logicielles, à l’automne prochain.

Comme avec iOS 12, les ingénieurs de Cupertino se sont concentrés sur la vitesse pour Swift 4.2. En particulier, les compilations d’apps écrites avec cette version sont plus rapides lors de la phase de debug, c'est-à-dire quand le développeur teste des changements en local, dans le simulateur ou directement sur un appareil. En fonction du projet, on peut attendre des compilations plus de deux fois plus rapides avec Swift 4.2 et Xcode 10.

Les progrès viennent surtout de l’outil de développement d’Apple, comme nous vous l’expliquions dans un précédent article. La compilation se fait en parallèle, ce qui explique d’ailleurs que les gains seront plus significatifs sur les Mac qui disposent d’un grand nombre de cœurs. Par ailleurs, Apple a optimisé le processus pour réduire le nombre de tâches redondantes et ainsi gagner du temps pendant la création d’une app.

Xcode, toujours, propose de nouvelles options pour les compilations. Pendant la phase de debug, quand le développeur teste son app sans la publier, une préférence permet de réduire l’optimisation et ainsi compiler le programme plus rapidement, au détriment des performances. Du côté du langage, plusieurs optimisations ont été menées, notamment dans la gestion du texte, à la fois pour améliorer la vitesse d’exécution et l’utilisation de la mémoire.

Notons aussi que Xcode 10 dispose d’une option qui optimise la compilation pour le poids du code en langage machine généré dans le processus. Ça ne réduira pas nécessairement le poids de l’app elle-même, puisque cela dépend avant tout des ressources annexes, par exemple des images utilisées par l’app. Mais c’est un levier proposé aux développeurs pour qui les performances brutes ne sont pas l’essentiel. En échange d’une réduction de 10 à 30 % du code généré, la baisse de performances se limite à 5 % en général d’après Apple.

Depuis la sortie de Swift 4, la syntaxe du langage est désormais stable, ce qui veut dire que des lignes de code écrites pour Swift 4.0 seront parfaitement compatibles avec la version 4.1 sortie il y a quelques mois, et avec la 4.2 qui sortira à l’automne. C’était une promesse d’Apple l’an dernier et l’entreprise s’y tient logiquement, mais cela n’empêche pas cette version d’introduire plusieurs nouveautés.

Nous n’allons pas détailler ici les nouvelles fonctions proposées cette année aux développeurs. Elles sont évoquées dans la session d’Apple ainsi que résumées dans ce Swift Playground interactif qui permet de les tester directement. Parmi toutes les nouveautés, évoquons tout de même celle qui est la plus facile à comprendre et expliquer : Swift 4.2 dispose d’une méthode simple pour générer des nombres aléatoires. Aussi étonnant que cela puisse paraître, le langage d'Apple ne proposait rien de tel auparavant et les développeurs devaient utiliser du C pour cette fonction assez basique et courante.

Xcode 10 propose de convertir le code écrit en Swift dans la dernière version du langage. Ce qui permet de bénéficier des nouvelles fonctions dans un projet, automatiquement quand c’est possible.

Point important, Xcode 10 sera la dernière version à prendre en charge le « mode Swift 3 » et donc à pouvoir compiler des apps écrites avec cette version du langage. Xcode 11 commencera avec Swift 4.0 au minimum et tous les développeurs devront avoir converti leur projet à cette date… ou bien continuer à utiliser une ancienne version. Ce qui est toujours possible, Xcode 9 restant disponible et pris en charge pendant un an encore au moins.

À ce sujet, macOS Mojave réduira toutefois les options, puisque ni Xcode 7, ni Xcode 8 ne peuvent être lancés sur ce système, alors que c’était encore possible jusqu’à High Sierra. On pourra en revanche continuer d’utiliser Xcode 9, qui est d’ailleurs installé par défaut en parallèle de Xcode 10 pendant la phase de bêta. Swift 3 sera donc la version la plus ancienne du langage qu’il est possible de compiler sur un Mac et Apple est très claire sur le sujet, cela ne devrait pas durer.

Xcode 7 refuse obstinément de se lancer sur macOS Mojave, au moins à ce stade du développement. C’était la dernière version capable de compiler du code Swift 2.

Swift 5 : enfin l’intégration au système

Swift 4 devait apporter la stabilité du code source et la stabilité des binaires, deux enjeux importants pour généraliser le langage et qu’il serve dans tous les cas de figure (lire : La stabilité, principal enjeu de Swift 4). Finalement, seul le code source a été stabilisé l’an dernier et ce n’est toujours pas en 2018 que l’édifice sera complété. Il faudra attendre Swift 5, prévu pour le début de l’année prochaine comme on le disait en préambule, pour bénéficier de la stabilité ABI.

Pour faire (très) simple, les ABI (Application Binary Interface) sont des briques de bas niveau qui font le lien entre l’app écrite par le développeur et le langage machine exécuté par le processeur. Avec Objective-C, ces briques sont intégrées directement dans iOS (ainsi que macOS, watchOS et tvOS) et une app peut compter dessus sans problème, quelle que soit la version du système. Swift a commencé son existence sans cette assurance : chaque app doit intégrer les ABI dans ses ressources, les systèmes ne fournissent rien.

Chaque app écrite en Swift doit embarquer ces fichiers avec tout le reste pour fonctionner correctement sous iOS. À partir de Swift 5, ces fichiers seront intégrés directement dans le système.

Quand un langage de développement est tout nouveau, cette approche reste indispensable pour ne pas bloquer ses évolutions dans les premiers temps. Swift a beaucoup évolué en quatre ans et les ABI ont été modifiées à plusieurs reprises pour s’adapter aux changements apportés au langage. Mais la contrepartie, c’est qu’une app créée avec Swift 1 risque de ne plus bien fonctionner, voire de ne plus fonctionner du tout aujourd'hui. Chaque mise à jour du système nécessite aussi une mise à jour des ABI et donc une nouvelle compilation.

Swift se stabilise, Apple a cessé d’introduire des changements cassants dans le code source et l’entreprise travaille depuis plusieurs années sur la stabilité ABI. Elle devrait enfin arriver en 2019 et l’entreprise a déjà annoncé que les mises à jour annuelles correspondantes de ses systèmes d’exploitation seront les premières à intégrer les binaires. À partir d’iOS 13 et de macOS 10.15, les développeurs pourront compiler une app sans ABI, ce qui permettra d’alléger le fichier final et apportera quelques optimisations.

Du côté du poids des apps, le gain pourra être très significatif pour les plus légères, comme notre app iOS. La version actuelle d’iGeneration iOS pèse environ 77 Mo, dont 27 Mo rien que pour les binaires indispensables à Swift. Plus du tiers du poids total de l’app pourra être éliminé quand ces nouveautés seront déployées. Apple promet d’autres gains pour les utilisateurs : les temps de lancement devraient être plus rapides, ce sera aussi un gain en matière de mémoire vive consommée, bref des performances en hausse grâce à cette meilleure intégration.

Pour les développeurs, Swift 5 sera l’étape à partir de laquelle ils auront l’assurance d’écrire du code et surtout de créer des apps qui fonctionneront sans problèmes sur les futures versions des OS Apple. Naturellement, il y aura toujours des changements dans les API et des nouveautés à prendre correctement en charge. Mais jusque-là, même les apps les plus basiques pouvaient casser à chaque mise à jour annuelle d’iOS et des autres systèmes.

Certains attendaient cette étape pour franchir le pas et abandonner Objective-C au profit de Swift, la version 5.0 devrait ainsi attirer davantage de développeurs. Y compris au sein d’Apple, où Swift reste encore le langage minoritaire, même s’il gagne du terrain chaque année.

illustration magazine 25 ans

MacGeneration a 25 ans !

Participez à la fête et découvrez l’histoire de votre site favori en précommandant notre magazine exclusif.

Je précommande le magazine