Xcode 14, l’environnement de développement fourni par Apple, promettait d’alléger les apps compilées par ses soins, en particulier celles qui tournent sous iOS 16 et les versions suivantes. La réalité est pourtant toute autre, puisque cette mise à jour a contribué au contraire à augmenter la taille des apps iOS. Et pas qu’un peu : pour certains apps, le poids a augmenté de 68 % en effectuant la compilation dans Xcode 14 au lieu de Xcode 13.
Les créateurs d’Emerge Tools, une série d’outils destinés aux développeurs d’apps mobiles, ont détaillé ce qui s’est passé dans un article publié sur leur blog. Puisque l’un des outils qu’ils proposent est pensé pour analyser le poids d’une app en quête d’optimisations, ils sont particulièrement bien placés pour analyser l’effet de Xcode 14 sur de nombreuses apps et pour comprendre ce qui s’est passé.
L’augmentation du poids des apps compilées avec Xcode 14 est la conséquence malheureuse de la fin du Bitcode, une idée lancée par Apple en 2015 que l’on pourrait résumer grossièrement ainsi. Au lieu d’envoyer sur les serveurs de l’App Store une app compilée prête à être installée, les développeurs envoient un Bitcode, un fichier qui contient en gros des instructions pour compiler la version finale. Ce n’est pas le code source de l’app, mais un intermédiaire qui aurait notamment permis à la firme de Cupertino de simplifier la transition 64 bits sur l’Apple Watch, sans faire appel aux développeurs.
Series 4 : la transition vers le 64 bits facilitée par Bitcode ?
L’avantage du Bitcode, c’est que l’app que vous téléchargez a été optimisée par Apple pour votre matériel. Parmi les optimisations réalisées sur ses serveurs, l’entreprise retirait notamment les « binary symbol », des fichiers de métadonnées qui sont indispensables pendant le développement et la compilation, mais inutiles dans le fichier final. L’air de rien, ces documents peuvent peser lourd et c’est ce qui a provoqué l’augmentation du poids des apps avec Xcode 14. Bitcode étant désactivé, les développeurs ont soumis des binaires finalisés à Apple et ces derniers n’étaient plus optimisés.
Dans le cas de l’app de Nike choisie en guise d’exemple, pas moins de 127 Mo supplémentaires sont liés à ces binary symbols qui n’ont pas été retirés dans la version finale. Ils sont particulièrement visibles dans les frameworks sous-jacents, puisque chaque élément a ses propres symboles et cela finit par peser particulièrement lourd sur le poids final de l’app.
Le site a analysé de nombreuses apps sur l’App Store et retrouvé des augmentations similaires dans de nombreux cas. Celle de Nike était la plus spectaculaire en termes de volume gagné à cause des binary symbols, mais ils peuvent avoir un impact bien plus léger… même chez Apple ! L’app Shazam, par exemple, a augmenté d’environ 2 Mo suite au passage à Xcode 14.
Pour les développeurs, l’article détaille comment configurer la compilation dans Xcode 14 pour retirer les binary symbols de l’app finale. La méthode recommandée est un script shell à ajouter au processus, juste avant la signature de l’app. Peut-être qu’Apple ajoutera une option plus simple pour le faire automatiquement, mais ce n’est pas le cas dans la version actuelle.
Apple n’a pas justifié l’abandon du Bitcode, si bien que l’on ne connaît pas ses motivations exactes. On sait néanmoins que cette idée aux multiples avantages théoriques avait aussi des inconvénients pratiques. Il y a plusieurs situations où utiliser le Bitcode n’était pas possible ou déconseillé et stocker les apps sur les serveurs de l’App Store dans ce format intermédiaire ne garantit pas autant leur pérennité qu’avec un binaire compilé.
Ces inconvénients n’étaient pas contre-balancés par des avantages aussi évidents que prévu et le format a finalement été bien peu utilisé par la pomme1. Tous ces éléments mis bout à bout ont probablement justifié l’arrêt de cette initiative, sept ans après son arrivée.
-
On n’est même pas sûrs que Bitcode a été vraiment utilisé un jour par Apple, l’entreprise n’ayant jamais communiqué sur le sujet. L’exemple donné plus tôt de l’Apple Watch Series 4 reste encore une hypothèse. ↩︎
Source : Michael Tsai