Swift 5 retire environ 8 Mo aux premières apps iOS

Nicolas Furno |

Disponible en version finalisée depuis trois semaines, Swift 5 commence à faire ses preuves sur l’App Store. Cette nouvelle version du langage de développement d’Apple apportait la stabilité des ABI, une étape importante qui permet, pour faire très simple, d’intégrer au système d’exploitation des fichiers de bas niveau qui font le lien entre le programme écrit par le développeur et le langage machine du processeur. Vous trouverez plus de détails et informations dans nos précédents articles sur le sujet :

Une app développée en utilisant Swift 5 et qui tourne sur les dernières versions des systèmes d’exploitation conçus par Apple peut profiter de cette nouveauté. Puisque le système intègre les ABI, l’app n’a plus besoin de les fournir et son poids est plus léger. C’était la théorie, mais un premier exemple permet de savoir ce que l’on gagne en pratique.

Les créateurs de Halide et Spectre, deux apps iOS dédiées à la photographie, ont utilisé Swift 5 pour les dernières versions des deux apps. À condition de les installer sur iOS 12.2 (ou la bêta d’iOS 12.3), on bénéficiera pleinement de la nouveauté et l’app installée sur votre iPhone sera plus légère. Et pas qu’un peu, puisque l’on parle dans ce cas de figure d’une réduction de 50 % de la taille de l’app, rien que ça.

@Halidecamera

C’est un cas assez extrême, puisque les deux apps étaient déjà très légères à la base. En retirant les ABI de l’app, Halide et Spectre ont perdu environ 8 Mo et ce sera le cas pour toutes les autres apps qui en font de même. Naturellement, ce n’est rien en comparaison du poids de bon nombre d’apps qui dépassent allègrement les 100 Mo. Néanmoins, si toutes les apps installées sur votre iPhone ou iPad perdent 8 Mo, cela commencera à faire un espace gagné significatif.

Point important rappelé par les créateurs de Halide, il faut en passer par les réglages d’iOS1 pour connaître le vrai poids d’une app après installation. La valeur donnée par l’App Store est faussée et le poids affiché est plus élevé que celui de l’app installée.


  1. Dans les Réglages, ouvrez la section « Général », puis « Stockage iPhone » (ou « Stockage iPad ») et patientez le temps que toutes les valeurs soient calculées. ↩︎

avatar julien74 | 

Faudra un jour que j’arrive à comprendre comment des apps comme Facebook ou messenger peuvent faire des centaines de Mo.... avec du code ...
c’est qu il y a des ressources graphiques et dans ce cas, pourquoi ne pas les télécharger à la volée quand l utilisateur en fait usage pour la première fois?

avatar romainB84 | 

je pense pas que ce soit les ressources graphiques qui prennent le plus de place dans l'app facebook ^^
a mon avis c'est surtout tout les framework propriétaires qui doivent bien faire exploser l'addition !

avatar julien74 | 

@romainB84

Non mais on parle de code.... 200mo avec du code texte écrit avec des petites mains qui ensuite est transformé en bytecode binaire.... ça en fait des kms de texte !!

avatar iPop | 

@julien74

Je me suis posé la même question.

avatar ErGo_404 | 

Facebook est codé avec React native, qui est un framework qui s'applique à reproduire à l'identique les éléments d'iOS. Pas sûr qu'il utilise le framework natif et du coup, si ça se trouve, ils intègrent l'ensemble des ressources nécessaires à faire "l'illusion".

Sinon par ailleurs, l'appli contient quand même beaucoup de ressources graphiques, une tonne de fonctionnalités, personnellement ça ne m'étonne pas plus que ça, le poids des applications grimpe vite.
Et au final les télécharger au besoin ... ça ralentit l'application à l'exécution, je pense qu'il vaut mieux faire un téléchargement une fois et avoir une appli super fluide par la suite.

avatar patchoulol | 

@ErGo_404

Tu confonds avec l’approche de Flutter. React Native, au contraire, n’est qu’un liant JavaScript entre vue natives. Et Facebook ne l’utilise qu’en partie dans leur app.

avatar GoH-An | 

15,5Mo pour "Halide" sur mon iphone SE (IOS 12.2) ?

avatar vince29 | 

Quand on pense que dans 64 ko (pour code + graphisme) certains font ça https://www.youtube.com/watch?v=JZ6ZzJeWgpY
: )

avatar saoullabit | 

@vince29

Ça faisait longtemps que je n’avais pas entendu parlé de la scène Démo
C’est ouf!
J’étais tombé sur un fps de 4 niveaux sur 64k il y a quelques années
Bref on peut faire des trucs de malade avec des appli optimisées

avatar abioninho | 

@vince29

Comment c’est possible ?

avatar vince29 | 

C'est possible parce qu'il n'y a aucune image utilisée.
Les planètes (le relief, les nuages, l'eau...) sont "générées" par un algorithme.
Après ce n'est "que" de la mise en scène.

Bon même si ça prend moins de place, il faut quand même triturer l'algorithme pour le faire tenir dans une place aussi restreinte.
Donc on triche.
On triche avec le matériel (certaines démos ne fonctionnent pas sur tous les pcs).
On triche avec les maths :
là ou toi tu as appris que sin(a) = cos(a+PI/2), le demomaker remarquera que sin(a) = cos(a+699) ça marche presque aussi bien (et que ça lui permettra d'écrire un shader plus court)

avatar vince29 | 

Comme 64 kb c'est encore beaucoup :) il y a des concours à 4kb

est arrivé seulement second à Breakpoint en 2009 (déjà ?) . Mais à sa décharge :
la démo fait ... 1kb (donc 1/8000ème de la place gagnée avec swift)
le premier était un terrain généré par iq

Pour ceux que ça intéresse, le Monsieur partage son savoir-faire, ses recettes et souvent ses sources sur son site et sur shadertoy

ATTENTION le lien suivant peut faire ramer ou planter votre navigateur

https://www.shadertoy.com/user/iq

avatar vince29 | 

Bizarre les liens youtube ont l'air d'air censurés ?
Donc pour les personnes intéressées, les id des vidéos sont
qQNIKOD6WnY et
jB0vBmiTr6o

avatar macbookpro2016 | 

Mode complot on: facebook et messenger sont très lourdes car elle intègre énormément de mouchards mode complot off

avatar Albator1138 | 

Pardonnez mon ignorance, mais qu'est-ce qu'une ABI ??
(je connais les API, mais ABI ???)

avatar patchoulol | 

@Albator1138

Le B est pour binary. La stabilité des ABI permet de s’assurer que le code compilé (binaire, donc) pourra s’appuyer sur les versions de Swift à venir (et il n’est donc plus nécessaire d’embarquer ta propre version dans ton app).

CONNEXION UTILISATEUR