Je possède un iPad de première génération qui est destiné à rester sous iOS 5.1.1, la dernière version d’iOS pour ce modèle d’iPad. Cette version est sortie il y a plus de 5 ans, et inévitablement le support logiciel est quasiment mort : il n’est plus possible de publier des applications compatibles avec cette version d’iOS. C’est malheureux, mais dans la mesure où les capacités matérielles de cet iPad étaient limitées, ce n’est pas trop aberrant.

Je voulais y installer la suite iWork (Pages, Numbers, Keynote) de manière à pouvoir l’utiliser comme un outil d’appoint pour rédiger des documents en mobilité, mais il n’est pas possible de procéder directement depuis l’iPad : on nous indique qu’il est trop vieux.

La solution consiste à passer par iTunes, sur Mac dans mon cas, pour bidouiller les requêtes qui interviennent lors du téléchargement de l’application.

Attention : il n’est plus possible de télécharger d’applications sur l’App Store iOS depuis iTunes à partir de la version 12.7!

Installation d’un proxy pour modifier des requêtes

L’idée est d’intercepter les requêtes vers l’iTunes Store pour changer le External Version Identifier (l’identifiant attribué à chaque version d’un logiciel distribué sur l’App Store). Pour ce faire nous utiliserons Charles, un proxy. Ce logiciel est payant ($50) mais la version gratuite suffit amplement.

Une fois l’application Charles lancée, vous devrez lui accorder les privilèges administrateurs pour qu’elle puisse intercepter les communications internes à votre ordinateur.

Nous allons devoir intercepter des communications chiffrées (SSL), donc il faut importer le certificat autogénéré de Charles, sinon iTunes rechignera à communiquer avec l’iTunes Store. Rendez-vous dans Help > SSL Proxying > Save Charles root certificate, sauvegardez le certificat quelque part, puis importez-le dans le trousseau.

Ensuite, exportez le certificat importé dans le trousseau au format .cer, et tapez la commande suivante pour l’ajouter en tant que certificat vérifié :

sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /chemin/vers/mon/certificat.cer

Modifier les requêtes vers l’iTunes Store

Lancez un téléchargement d’application quelconque depuis iTunes. Vous devriez observer l’apparition d’une ligne vers un serveur dont le nom de domaine est formatté ainsi : ***-buy.itunes.apple.com. Faites un clic droit dessus puis sélectionnez Enable SSL Proxying. Cela va faire en sorte à ce que les communications SSL soient interceptées.

Lancez à nouveau un téléchargement d’application depuis iTunes. Dépliez l’arbre du serveur ***-buy.itunes.apple.com (WebObjects > MZBuy.woa > wa > buyProduct) et faites un clic droit sur buyProduct pour sélectionner Breakpoints. Cela va avoir pour effet de mettre en attente chaque requête vers buyProduct, pour pouvoir modifier son contenu.

Lancez à présent le téléchargement d’une application de la suite iWork, par exemple Pages. Charles va s’activer et vous proposer de modifier la requête. Cliquez sur l’onglet XML Text, et modifiez la valeur de appExtVrsId. Vous devez utiliser les valeurs suivantes :

  • Pages 1.7.2 : 14498879
  • Numbers 1.7.3 : 16806622
  • Keynote 1.7.2 : 14498877

Cliquez ensuite sur Execute, cela vous sera demandé plusieurs fois. Le téléchargement de l’application devrait commencer, et vous pourrez devriez vous retrouver avec l’application souhaitée dans vos téléchargements iTunes.