Swift Concurrency bientôt compatible avec les versions antérieures de iOS et macOS ?

Florent Morin |

Lors de la WWDC21, Apple a présenté aux développeurs Swift Concurrency, un nouveau mécanisme interne de Swift permettant d’améliorer l’exécution des tâches parallèles au sein des applications. Cette petite révolution était initialement réservée aux versions les plus récentes des systèmes Apple. Cependant, il semblerait que le constructeur travaille à améliorer sa compatibilité, au plus grand bonheur des développeurs.

Swift ne vous fera plus perdre le fil (d'exécution)

Nous n’allons pas revenir en détail sur les avantages de Swift Concurrency que nous avions présenté dans un précédent article. Il s’agit d’un mécanisme venant remplacer Grand Central Dispatch (GCD) dans la gestion des tâches parallèles.

Par exemple, quand vous lisez une vidéo dans une app telle que Netflix ou TikTok, un tâche est dédiée au téléchargement de la vidéo, une autre au décodage et une troisième à l’affichage de celle-ci. Chacune de ces tâches va communiquer avec l’autre, les données téléchargées seront envoyées au décodage et ainsi de suite. Pour ordonnancer toutes ces tâches, on fera appel à GCD qui va fonctionner au niveau du système d’exploitation pour répartir la charge entre les différents cœurs matériels.

Pour continuer sur cet exemple, si la tâche de téléchargement vient modifier les données téléchargées en même temps qu’elles sont exploitées pour le décodage, l’application va planter brutalement. Cela implique pour le développeur de gérer ce cas de figure sans monter une usine à gaz. Or, quand un tel plantage intervient, c’est extrêmement complexe à corriger.

C’est là qu’intervient Swift Concurrency qui vient remplacer la gestion des tâches parallèles du développeur. Le développeur aura juste à demander à exécuter une tâche en parallèle sans se soucier du reste. Il devra également préciser quelle portion de code peut être accédée par plusieurs tâches différentes. Et ce n’est pas que l’un des petits avantages à court terme du procédé.

Nous voyons bien là l’intérêt d’un tel mécanisme. Mais quid des anciennes versions de iOS ainsi que des autres systèmes d’exploitation ? Dès la sortie de la version beta de Xcode 13, Apple avait été assez claire sur le sujet : Swift Concurrency requiert les dernières versions des systèmes d’exploitation, à savoir macOS 12, iOS 15, iPadOS 15 et consorts. C’est une limitation connue qui peut être résolue ou non, le constructeur ne s’est pas engagé à ce sujet.

La note de version de Xcode 13 beta est très claire : Swift Concurrency est réservé aux dernières versions des systèmes Apple

Cependant, le développement de Swift étant open source, nous avons récemment pu observer quelques améliorations prometteuses à ce sujet.

Cela a commencé fin juillet, quand les développeurs se sont offert la possibilité d’inclure Swift Concurrency sous forme d’un composant externe. Les choses se sont précisées fin août avec la possibilité de compiler une version de Swift incluant du code Concurrency compatible avec les anciens systèmes. Une option qui est devenue le mécanisme par défaut de compilation de Swift quelques jours plus tard.

La petite ligne de code qui change tout

Swift Concurrency deviendrait alors compatible avec macOS 10.15, iOS 13, watchOS 6 et tvOS 13, sous réserve que les ingénieurs Apple dédiés au projet puissent faire sauter les derniers remparts qui sont encore devant eux.

Quelle version de Xcode / Swift serait concernée par cette nouveauté ? À ce stade, il est impossible de se prononcer. Cela peut arriver dès Swift 5.5 avec Xcode 13.0, ou dans une version 5.5.1 qui viendrait avec Xcode 13.1, ou plus tard.

Tags
avatar Ali Baba | 

Ce qui est dommage c’est qu’une rétrocompatibilité limitée à iOS 13 ne sert pas à grand chose. Tous les appareils qui peuvent faire tourner iOS 13 peuvent aussi faire tourner iOS 15, donc le problème va se résorber tout seul en quelques mois.

Une compatibilité étendue à iOS 12 serait beaucoup plus utile, car il y a un petit paquet d’appareils bloqués à cette version, ce qui empêche certaines apps de supprimer le support de cette version.

avatar Florent Morin | 

Le cap du iOS 12 minimum a été franchi depuis quelques mois. Je pense que iOS 13 deviendra la norme début 2022, avec du legacy en iOS 12 toujours sur l'App Store mais sans MAJ.

En 2022, l'iPhone 6s aura 7 ans.

avatar Ded77 | 

@Ali Baba

Chez nous on vient de passer en minimum d’iOS 11.0 vers iOS 12.2 (notamment pour éviter d’embarquer la runtime de Swift et donc de gagner du poids).

Mais virer iOS 12 complètement, c’est encore un peu difficile. L’iPhone 6 est encore pas mal utilisé (et très capable) c’est dur de s’en séparer.

Donc +1 pour le support d’iOS 12 :)

avatar Mrleblanc101 | 

@Ali Baba

Les développeurs n'ont pas quelques mois à attendre...

avatar YetOneOtherGit | 

@Ali Baba

"Ce qui est dommage c’est qu’une rétrocompatibilité limitée à iOS 13 ne sert pas à grand chose. "

C’est plus de 90% du parc installé actif d’après les diverses estimations 😎

avatar Ali Baba | 

@YetOneOtherGit

Mais dans 6 mois ça ne sera quasiment plus rien. Alors qu’iOS 12 représente encore une part non négligeable, qui n’évolue presque pas.

avatar YetOneOtherGit | 

@Ali Baba

"représente encore une part non négligeable"

Tout dépend du seuil à partir duquel ont peu considéré une part comme négligeable 😉

avatar YetOneOtherGit | 

@Ali Baba

"Mais dans 6 mois ça ne sera quasiment plus rien. "

Ios 13+14+15 ce sera toujours une part absolument écrasante du parc, la logique de ton propos m’échappe 🤔

avatar Ali Baba | 

@YetOneOtherGit

Enlève le 15 et tu comprendras mon propos.

avatar YetOneOtherGit | 

@Ali Baba

"Enlève le 15 et tu comprendras mon propos."

Toujours pas et même encore moins 😃: 13 + 14 c’est toujours une part colossale du parc installé actif.

L’exclusion d’iOS 12 laisse rien de considérable sur la route.

avatar Florent Morin | 

@YetOneOtherGit

Je pense que le propos est le suivant.

Swift Concurrency va supporter iOS 13. Mais demain, tous les utilisateurs sous iOS 13 ou 14 seront sous iOS 15.

Alors que proportionnellement la part d’utilisateurs iOS 12 va moins baisser. En comparaison par rapport à iOS 13 et 14.

Personnellement, j’en doute. Je pense que pas mal d’utilisateurs vont migrer vers des iPhone plus récents. Difficile à estimer.

avatar thewindwaker | 

Hum il ne faut pas oublier le btob. Je suis dans le saas btob et chez nous les clients se trimballent des vieilles version. On est iOS 10 minimum et pas possible de changer pour le moment

avatar Florent Morin | 

@thewindwaker

Alors ça, ça me surprend. D’un point de vue comptable, en général, ça renouvelle pas mal au niveau des parcs informatiques. J’aurais pensé que ce serait l’inverse.

avatar YetOneOtherGit | 

@FloMo

"J’aurais pensé que ce serait l’inverse."

Comme toujours pas de règle de portée générale.

Sur un large parc d’iPad utilisée par exemple sur des lieux de vente, servant juste de front à une solution SaaS le renouvellement peut être lent.

Même contablement amorti le rapport coût/ bénéfice du renouvellement peu ne pas valoir le coût.

Les parcs informatiques conséquents en entreprise peuvent être assez anciens 😉

avatar YetOneOtherGit | 

@thewindwaker

"On est iOS 10 minimum et pas possible de changer pour le moment "

Flotte d’iPad je suppose?

avatar YetOneOtherGit | 

@FloMo

"Personnellement, j’en doute. Je pense que pas mal d’utilisateurs vont migrer vers des iPhone plus récents. Difficile à estimer."

Surtout cette logique ne change en rien la marginalité d’iOS 12 🤔

avatar dexter | 

@FloMo

Les possesseurs d’iPads renouvellent moins vite leur équipement que les possesseurs d’iPhones.

Reste à savoir si les utilisateurs d’iPads restant bloqués sous iOS 12, sans doute plus importants en proportion que les possesseurs d’iPhones dans le même cas, représentent une population d’utilisateurs suffisante pour inciter les développeurs à maintenir une compatibilité iOS 12.

avatar YetOneOtherGit | 

@dexter

"Reste à savoir si les utilisateurs d’iPads restant bloqués sous iOS 12, sans doute plus importants en proportion que les possesseurs d’iPhones dans le même cas, représentent une population d’utilisateurs suffisante pour inciter les développeurs à maintenir une compatibilité iOS 12."

On est à moins de 10% du parc globalement

avatar Ali Baba | 

@FloMo

Merci.

J’espère que tu as raison concernant ton dernier paragraphe, mais pour l’instant sur l’app de mon client impossible de dropper iOS 12, trop d’utilisateurs l’utilisent (c’est la version n°2 au classement). À mon grand désespoir… Impossible d’utiliser SwiftUI, concurrency et autres nouveautés bien pratiques.

avatar Florent Morin | 

@Ali Baba

Le plus problématique est surtout qu’une utilisation conditionnelle de Swift Concurrency n’est pas possible (à ce jour).
Contrairement à Combine et SwiftUI qui peuvent cohabiter avec du legacy en fallback.

Ceci étant, pour l’ensemble, il est quasiment indispensable aujourd’hui de passer sur du MVVM qui viendra totalement décharger les vues et leurs contrôleurs de la gestion de données, et donc potentiellement l’utilisation de repos pour alimenter sereinement les modèles de vue. Ça fait déjà un sacré boulot en amont !

L’astuce pour Swift Concurrency est de concevoir un package à qui a son propre cycle de vie est est consommé par l’app. Comme ça, on perd pas de temps à la migration.

Au moins, on a cette trajectoire sur l’année à venir a minima. Et ça permet de rendre plus fiable la dernière version compatible iOS 12 qui restera au téléchargement mais sans évolution. (Et donc anticiper la rétro-compatibilité)

Après, quand on voit que Netflix est iOS 14+, Office, Twitter, Shazam et Amazon sont iOS 13+… ça devrait forcer les utilisateurs à la migration.

Entre le vieillissement du matériel (7 ans !) et l’évolution des apps, je pense qu’au printemps 2022 iOS 13 sera la norme. Et 1 an, ce n’est pas de trop pour préparer le terrain !

avatar megared | 

d'après Apple 93% des iPhones sont sur minimum iOS 13 et 88% pour les iPads et si on prend les appareils sortis ces 4 dernières années on monte à 98% pour l'iPhone et 99% pour l'iPad.
le lien: https://developer.apple.com/fr/support/app-store/

avatar YetOneOtherGit | 

@megared

"d'après Apple 93% "

Et pas que d’après Apple, ce chiffre se recoupe sur les diverses analyses entre autres d’usage.

avatar francoismarty | 

Il me semble que la stat concerne les appareils qui se connectent au store.
Quels sont les chiffres pour l'ensemble des terminaux ? Ce serait intéressant.
Il doit quand même y avoir un paquet de vieux terminaux qui servent encore et c'est dommage de les oublier.

avatar Florent Morin | 

@francoismarty

Les appareils qui ne se connectent pas aux stores ne téléchargent pas d’apps.

avatar francoismarty | 

@FloMo

Sans blague ?
Peut-être que si justement on supportait un peu plus les anciens terminaux, ils pourraient télécharger des apps.

avatar YetOneOtherGit | 

@francoismarty

"Peut-être"

Ou peut-être que la faible segmentation des versions active de l’OS dans l’écosystème Apple est une bénédiction 😎

avatar francoismarty | 

@YetOneOtherGit

Bénédiction pour qui ? La planète ? Les utilisateurs ?

Ou pour les développeurs et pour Apple afin qu’ils écoulent chaque année des caisses de nouveaux terminaux ?

avatar YetOneOtherGit | 

@francoismarty

C’est comme toujours un compromis et quand le parc installé est fragmenté ce sont les développeurs par eux même qui décident d’abandonner des versions jugées trop marginales.

Tu peux prendre le pb dans le sens que tu veux : ce qui est ancien finit rapidement par avoir un ratio coût/ bénéfice n’incitant nullement à continuer à le prendre en charge pour les développements logiciel.

Le coût de maintenance de versions différentes ciblant plusieurs générations d’OS est très rapidement rédhibitoire au regard des bénéfices qu’on peut en tirer.

Alors que l’adoption des nouveautés issue des nouvelles versions d’OS offrent elles souvent un vrai retour sur investissement

Il y a les utopies idéalistes, la pensée magique du Yakafokon et il y a les réalités pragmatiques.

avatar YetOneOtherGit | 

@francoismarty

"Il me semble que la stat concerne les appareils qui se connectent au store.
Quels sont les chiffres pour l'ensemble des terminaux ? Ce serait intéressant."

Les autres études basées sur d’autres approches corroborent ces chiffres.

avatar YetOneOtherGit | 

@francoismarty

"Il doit quand même y avoir un paquet de vieux terminaux"

10% du parc installé en valeur relative c’est peu, mais effectivement ça fait quand même beaucoup de terminaux.

Mais le business s’appuie toujours pour ses arbitrages sur des chiffres globaux 😉

CONNEXION UTILISATEUR