À l’heure où l’avenir de Flutter questionne, il est bon de se rappeler que le développement mobile s’appuie aussi et avant tout sur des langages de programmation dits natifs mis au point ou recommandés par les principaux acteurs que sont Apple et Google. Le mois dernier nous en profitions d’ailleurs pour vous présenter un aperçu rapide des nouveautés proposées par Kotlin 2, le langage de programmation adopté par Google. Profitons de la récente sortie de Swift 6 pour explorer plus en détail comment cette nouvelle version améliore la productivité des développeurs et offre la possibilité de créer des apps plus stables. Nous verrons d’ailleurs ensuite comment il facilite désormais l’organisation des tests. Enfin, nous ne manquerons pas d’aborder comment cette nouvelle version intègre de manière plus poussée les possibilités offertes par le machine learning.
Coder une application mobile iOS avec Swift 6 : un bond en avant pour la productivité des développeurs.
L’obsession d’Apple en matière d’expérience utilisateur optimale se reflète clairement dans Swift. En mettant l’accent sur une gestion fine de la mémoire et de la consommation de données, Swift offre intrinsèquement la possibilité de créer des applications plus réactives voire économes en énergie. Dans cette nouvelle version majeure, l’accent est davantage mis sur la sécurité et la stabilité. Plusieurs nouveautés viennent en effet, faciliter la gestion des erreurs de programmation notamment dans le cas de concurrence. Des erreurs souvent difficiles à repérer et à reproduire.
Swift 6 introduit de nouvelles fonctionnalités qui allègent la tâche des développeurs en matière de programmation concurrente.
Un compilateur plus sophistiqué est désormais capable d’effectuer une analyse statique plus approfondie du code. Cela se traduit par une diminution significative des avertissements et une détection précoce des erreurs potentielles. Désormais, les objets peuvent être transmis entre différents threads sans risque d’erreur si, soit ils respectent le protocole Sendable, soit si le compilateur peut garantir leur sécurité. Grâce à cette nouvelle fonctionnalité, les développeurs peuvent désormais utiliser plus facilement des objets dans différentes parties de leur programme, sans avoir à s’inquiéter des problèmes liés à la concurrence. Le compilateur s’assure que tout se passe bien, ce qui simplifie considérablement le travail.
Nous avons évalué un certain nombre de langages successeurs du C++ pour le navigateur Ladybird @ladybirdbrowser et celui qui répond le mieux à nos besoins semble être le langage Swift […] Swift dispose d’une sécurité contre les courses de mémoire et de données (à partir de la version 6).
Andreas King
Swift 6 met le parallélisme à portée de tous les développeurs d’applications mobiles iOS.
La fonction async let
permet d’exécuter plusieurs opérations en parallèle. Elle gère automatiquement les erreurs et permet désormais d’attendre les résultats de toutes les tâches avant de poursuivre. Cette caractéristique la rend particulièrement utile pour les applications qui doivent récupérer des données de multiples sources, comme des API. Cependant, il est important de noter que async let
s’illustre avant tout aux tâches indépendantes. Si une tâche dépend du résultat d’une autre, il est préférable d’utiliser une approche séquentielle.
import Foundation
func fetchData() async -> (String, String) { async let firstData = fetchFirstData()
async let secondData = fetchSecondData() return await (firstData, secondData)} func
fetchFirstData() async -> String {`
//Simuler une tâche réseau
await Task.sleep(2_000_000_000) return "Deuxième donnée"}
//Appel de la fonction asynchrone
Taskn { let(data1, data2) = await fetchData() /print("Résultat :", data1, data2) }
Les Actors simplifient la gestion de données partagées dans des applications mobiles multi-threadées.
Les acteurs (Actors) font leur apparition au sein de Swift 6. Il s’agit de nouveaux types de références qui simplifient la gestion de données partagées dans des applications mobiles multi-threadées. En encapsulant l’état mutable et en garantissant un accès séquentiel, les acteurs éliminent les risques de race conditions. La syntaxe async/await facilite leur utilisation, et permet d’accéder à leurs propriétés et méthodes de manière asynchrone. Les acteurs s’intègrent parfaitement aux groupes de tâches, et offrent ainsi un modèle de programmation plus sûr et plus expressif pour les développements concurrents.
Les “Actors”, c’est la pierre angulaire de cette nouvelle mise-à-jour. C’est capital comme concept. À l’avenir, on aura des acteurs dans 100% des apps, pour faire des webservices, traiter la data etc.
Florent – développeur mobile chez Ikomobi.
Swift testing : le nouveau framework de test de Swift 6 offre une flexibilité inédite, une meilleure organisation, moins de code.
Le développement d’apps est un processus complexe qui requiert une attention méticuleuse aux détails. Pour garantir la qualité et la fiabilité des applications, les tests sont indispensables mais toujours laborieux. Swift 6, propose Swift testing, un nouveau framework de test conçu pour simplifier et améliorer ce processus. Un gain de temps qui, in fine, se traduit par des applications de meilleure qualité.
L’API de Swift Testing est construite à base de macros. Elle offre donc la possibilité de personnaliser au sein d’Xcode le comportement des tests ou des suites de test tout en étant relativement économe en matière de code. La macro Test
par exemple, offre désormais la possibilité de personnaliser entièrement le nom des tests. Les macros supportent également divers arguments (Traits) qui permettent de modifier les propriétés des tests, comme l’ajout de tags, la désactivation conditionnelle, ou le passage de paramètres. Indépendamment des classes, les tests peuvent aussi être menés de manière globale. De plus, ils peuvent être regroupés dans des structures, des classes ou des acteurs à l’aide du concept de Suite. Une Suite peut avoir une série de propriétés qui affectent tous les tests associés. Pour faciliter l’écriture des tests, les macros d’assertion sont également réduites au nombre de deux, #expect
et #require
. Les arguments de test permettent d’exécuter une même méthode avec différents paramètres.
“Côté tests, cette nouvelle lib, c’est du jamais vu jusqu’à présent au sein des autres langages. C’est véritablement une petite révolution !”
Florent – développeur mobile chez Ikomobi.
Swift 6 facilite l’intégration de modèles de machine learning dans les applications iOS.
En insistant sur l’intégration plus poussée de modèles de machine learning, l’équipe en charge de Swift cherche à ouvrir de nouvelles perspectives pour la création d’applications intelligentes. Avant Swift 6 : l’intégration de modèles de machine learning dans les applications iOS s’avérait relativement complexe car elle exigeait d’employer plusieurs frameworks différents. Swift 6 facilite l’intégration de modèles de machine learning grâce à des améliorations de l’interopérabilité avec des frameworks comme Core ML et TensorFlow. L’exemple suivant montre comment utiliser Core ML pour classifier une image. Le modèle CoreML est chargé, une requête de classification est créée et exécutée, puis les résultats sont affichés.
import CoreML
// Charger un modèle Core ML
let model = try! VNCoreMLModel(for: Resnet50().model)
// Créer une requête de classification
let request = VNCoreMLRequest(model: model) { request, error in
guard let results = request.results as? [VNClassificationObservation] else { fatalError("Model`
Swift 6 marque une nouvelle étape dans l’évolution des langages de programmation pour iOS. Productivité accrue, outils de tests avancés, intégration plus poussée en matière de machine learning, cette nouvelle version s’impose plus que jamais comme le meilleur choix pour développer des applications iOS stables, performantes et dans un avenir pas si lointain, plus intelligentes. En guide de conclusion, je citerai Adrien, lead tech iOS : “À la lumière des premières migrations que nous réalisons actuellement, je dirais qu’avec Swift 6, il est plus simple de créer que d’adapter. Cette nouvelle version est sans nul doute plus accessible aux nouveaux développeurs. Elle exige toutefois davantage de rigueur”. Une rigueur qui va naturellement se sentir en matière de stabilité accrue. C’est déjà un point qui contribue à la réputation de Swift, mais cette nouvelle version devrait plus que jamais faire la différence avec des frameworks hybrides comme Flutter ou React Native.
Sources :
David MARTINEZ “Swift testing (finally!)” in Medium [dernière version du 29/07/24] (21/11/24). [https://medium.com/@daviddvd19/swift-testing-finally-2315169d9baf].
Jade EMY “Swift 6, la nouvelle version majeure du langage de programmation Swift, est disponible” in Developpez.com [dernière version du 18/09/24] (20/11/24). [https://swift.developpez.com/actu/362800/Swift-6-la-nouvelle-version-majeure-du-langage-de-programmation-Swift-est-disponible-avec-une-nouvelle-bibliotheque-Swift-Testing-et-une-prise-en-charge-etendue-de-Linux-et-de-Windows/].
Holly BORLA, Pavel YASKEVITCH et Ben COHEN “Dynamic actor isolation enforcement from non-strict-concurrency contexts” in Github [dernière version du 19/08/24] (20/11/24). [https://github.com/swiftlang/swift-evolution/blob/main/proposals/0423-dynamic-actor-isolation.md].
Michael GOTTESMAN, Joshua TURCOTTI et Holly BORAL “Region based isolation” in Github [dernière version du 19/08/24] (20/11/24). [https://github.com/swiftlang/swift-evolution/blob/main/proposals/0414-region-based-isolation.md].
Jade EMY “Le navigateur Ladybird commencera à utiliser le langage Swift au lieu de C++ cet automne” in Developpez.com [dernière version du 11/08/24] (20/11/24). [https://web.developpez.com/actu/361360/Le-navigateur-Ladybird-commencera-a-utiliser-le-langage-Swift-au-lieu-de-Cplusplus-cet-automne-car-Swift-offre-une-securite-de-la-memoire-et-est-egalement-un-langage-moderne-avec-une-ergonomie-solide/].
Paul HUDSON “What’s new in Swift 6.0?” in Hacking with Swift [dernière version du 30/06/24] (20/11/24). [www.hackingwithswift.com/articles/269/whats-new-in-swift-6].
John McCALL, Holly BORLA, Doug GREGOR et Xiaodi WU “Inheritance of actor isolation” in Github [dernière version du 19/06/24] (20/11/24). [https://github.com/swiftlang/swift-evolution/blob/main/proposals/0420-inheritance-of-actor-isolation.md].
“Swift testing” in developer.apple.com [dernière version du 22/11/24] (22/11/24). [https://developer.apple.com/xcode/swift-testing/].
« Swift 6 et Apple Intelligence : l’impact des nouveautés Apple pour les développeur·euses” in mirego.com [dernière version 03/0724] (25/11/24). [https://www.mirego.com/fr/nouvelles/swift-6-et-apple-intelligence-l-impact-des-nouveautes-apple-pour-les-developpeur-euses].
“Automatic Reference Counting” in docs.swift.org [dernière version de 2024] (20/11/24). [https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/].
“Comptage automatique des références dans C++” in Embarcadero [dernière version du 28/01/21] (20/11/24). [https://docwiki.embarcadero.com/RADStudio/Sydney/fr/Comptage_automatique_des_références_dans_C%2B%2B].