L’un des principaux freins à l’adoption d’iOS 8 n’était autre que le poids de sa mise à jour — 4,6 Go — empêchant son installation over the air sur les appareils encombrés. Mais les possesseurs d’iPhone dotés de seulement 8 ou 16 Go de stockage peuvent se réjouir : non seulement la mise à jour over the air d’iOS 9 ne pèsera que 1,3 Go, mais Apple a conçu de nouvelles technologies pour alléger considérablement les applications.
Les développeurs doivent prendre en compte la variété des appareils iOS : certains ont des processeurs 32 bits et d’autres des processeurs 64 bits, certains ont des puces graphiques compatibles avec Metal et d’autres pas, certains ont des écrans Retina et d’autres des écrans Retina HD, certains sont des iPhone et d’autres des iPad. Leurs apps contiennent donc des ressources qui ne sont pas utiles à tous les appareils… mais qui prennent de la place sur tous les appareils.
L’app slicing résout le problème : l’App Store d’iOS 9 est capable de « découper » les applications de manière à créer des « variantes » précisément adaptées à chaque appareil. Un iPhone 4S ne téléchargera plus les ressources réservées à l’iPhone 6 Plus, et inversement l’iPhone 6 Plus ne téléchargera plus les ressources réservées à l’iPhone 4S. Les applications prendront ainsi de 20 à 40 % d’espace en moins, un gain qui sera d’autant plus sensible sur les anciens appareils.
Les développeurs n’ont pas grand-chose à faire pour que leurs applications bénéficient de l’app slicing, mais ils devront prendre un peu de temps pour les adapter au système d’on-demand resources. Les ressources les plus lourdes, comme les images ou les sons, peuvent désormais être « marquées » comme « ressources à la demande ». Dès lors, elles ne seront pas chargées avant que l’application en ait besoin, et supprimées dès que cela ne sera plus le cas.
Ce système s’adresse en priorité aux jeux, même s’il peut être utilisé par toutes les applications. L’utilisateur ne téléchargera que les ressources essentielles au lancement de l’application ; l’App Store lui transmettra ensuite les ressources dont il a besoin (par exemple quand il passe à un nouveau niveau), en supprimant progressivement les anciennes (par exemple le niveau précédent). Le système est censé être invisible… mais Apple n’explique pas ce qui se passe en cas de coupure de la connexion ou de panne de l’App Store.
Ces deux nouveautés reposent sur le fait que les développeurs n’envoient plus des binaires compilés, mais uniquement du bytecode. Un code intermédiaire qu’Apple peut recompiler à la volée pour créer les variantes et envoyer les ressources à la demande, mais aussi pour faire profiter les applications des avancées de son compilateur, sans que le développeur n’ait rien à faire. Ce mécanisme est tellement important qu’il est obligatoire pour les applications watchOS, et activé par défaut (quoiqu’encore facultatif) pour les applications iOS.