Daß der Meister ein böser Jünger des heiligen Jobs ist und das Apfel-Upgrade verweigert, schrieb ich ja schon. Dazu gehört, daß auch das alte iTunes inklusive Apps dableibt. Wie ebenfalls geschrieben, scheint des Meisters Na nicht getrogen zu haben  – ich falle nämlich zunehmend über Apps, die einfach aus dem Appstore verschwunden sind. Und zwar nicht nur so, daß man sie nicht mehr kaufen kann, sondern auch so, daß sie aus der Liste der gekauften oder der der ausgeblendeten Artikel still und leise verschollen sind. Kurz: “weg” im Sinne von “wirklich weg”, ohne sie irgendwo im Account neu laden zu können. Auf einem neuen Gerät kann man sowas schlicht und einfach nicht mehr installieren, wenn man es nicht auf dem PC hat, kopieren von Eifon zu Eifon geht ja bekanntermaßen nicht.

Es geht also nix über die lokale Sicherung der gekauften Apps in iTunes.

Nun hat der Maschinist jedoch in einem Fall spontaner geistiger Umnachtung etwas spät reagiert, als es um das Updaten von Apps ging – und iTunes gesagt: “mach halt”, wonach iTunes dann einige Apps freudestrahlend auf iOS11-only-Versionen aktualisierte.

Dumm gelaufen, und wenn es nach Apple geht, hat man damit dann halt verloren.

Wenn es nach mir geht, nicht. Also suchte ich und fand einen Beitrag von 2015, in dem ein freundlicher Mensch festhielt, was man tun möge, um iTunes zu veräppeln und alte Versionen von Apps zu laden. Dazu braucht man Fiddler, iTunes 12.4.3 (neuere Versionen lassen sich von Fiddler nicht einfach so veräppeln) – und einen Rechner oder eine Virtuelle Maschine, wo man beides installieren kann. Dann nutzt man Fiddler, um die Kommunikation von iTunes mit dem Server zu verändern, wenn man die App herunterlädt – und kriegt seine alte App-Version.

Soweit, so gut. Nur hat Apple offenbar den Appstore des alten iTunes lahmgelegt; egal, was man tut, man kann keine Apps aus dem Appstore mehr herunterladen – was ein kleines Problem darstellt.

Fast jedenfalls. Wenn das alte iTunes die App nämlich kennt und sie nur aktualisieren will, geht das noch. Nur wie kriegt man eine alte Version der App in das alte iTunes rein, die es aktualisieren könnte, damit man das austricksen und eine alte Version der App laden kann?

Klingt nach einem Henne-Ei-Problem. Aber es geht, und zwar so:

Los gehts wie gehabt – Fiddler und iTunes 12.4.3 herunterladen und installieren. Außerdem braucht man eine funktionierende Installation von iTunes 12.6.3.

  1. Fiddler starten,dort “Tools — Fiddler Options — HTTPS” wählen. Dort “Decrypt HTTPS traffic” aktivieren, mit “Yes” bestätigen und das Zertifikat installieren.  Danach mit “Actions” -> “Export Root Certificate to Desktop” das Zertifkat exportieren…
  2. … zum Desktop wechseln und dort durch Rechtsklick auf das Zertifikat und Klick auf “Installieren” das Zertifikat auf dem Rechner installieren. Als Speicherort “lokaler Computer” und als Zertifikatsspeicher “Vertrausnwürdige Stammzertifizierungsstellen” wählen.
  3. Fiddler starten, falls es geschlossen wurde, iTunes öffnen (Meldung  “Certificate Error” mit “yes” bestätigen), einloggen und iTunes autorisieren. Soweit nichts neues also.
  4. Der Weg, nun einfach in der alten iTunes-Version nach der App zu suchen, klappt nicht. Daher brauche wir nun das neue iTunes, in dem wir nach der App suchen, von der eine ältere Version heruntergeladen werden soll, und diese in der neuesten Version herunterladen. Bei dieser Gelegenheit kann man auch gleich einen Blick in die Versionshistorie der App werfen, sich die Versionsnummer der gewünschten Version (z.V. 2.2.0) und der Version davor (z.B. 2.1.9) merken und außerdem notieren, wieviele Versionen nach dieser Version herausgekommen sind, z.B. zwei Versionen, wenn die aktuelle Version die 2.2.2 ist.
  5. Jetzt gehen wir im neuen iTunes in die App-Mediathek, klicken auf die gerade geladene App und wählen “Im Windows-Explorer anzeigen”, um zur .IPA-Datei zu gelangen. Diese Datei kopieren wir nun irgendwohn, z.B. auf den Desktop und ändern die Versionsnummer in die der Version vor der von uns gewünschten (2.1.9). Hieraus bauen wir nun eine Datei, von der iTunes denkt, es sei eine alte Version, die man updaten müsse:
    • die Dateiendung in “.zip” ändern und die Datei öffnen
    • die Datei “iTunesMetadata.plist” auf den Desktop kopieren und mit einem geeigneten Texteditor (z.B. Atom oder Notepad++) öffnen, der mit Unix-Zeilenumbrüchen umgehen kann
    • Nun wird diese Datei an zwei Stellen editiert:
      • im oberen Viertel der Datei befindet sich der Abschnitt, wo die aktuelle Versionsnummer zweimal angegeben ist. Diese auf die alte Version ändern:
 <key>bundleShortVersionString</key>
 <string>2.2.3</string>      <-- ändern in 2.1.9
 <key>bundleVersion</key>
 <string>2.2.3</string>      <-- ändern in 2.1.9
      • im unteren Viertel der Datei befindet sich der Abschnitt, wo der Software-Identifikationscode der aktuellen Version steht. Freundlicherweise schreibt Apple alle alten Identifier gleich mit dazu, jede Zeile entspricht einer Version. Oben ist die erste, unten ist die letzte.
<key>softwareVersionExternalIdentifier</key>
<integer>825113686</integer>    <-- Nr. der vorliegenden Version
<key>softwareVersionExternalIdentifiers</key>
<array>
[...]
<integer>5043970</integer>
<integer>7580853</integer>      <-- 4. Zeile: Version 2.1.9
<integer>817760202</integer>    <-- 3. Zeile: Version 2.2.0
<integer>818566450</integer>    <-- 2. Zeile: Version 2.2.1
<integer>825113686</integer>    <-- 1. Zeile: aktuell: 2.2.2 
</array>
      • Aus der Liste nun die passende Nr. aussuchen und diese in die Zeile bei “softwareVersionExternalIdentifier” eintragen:
<key>softwareVersionExternalIdentifier</key>
<integer>7580853</integer> <-- Nr. der alten Version
    • Nun die Datei “iTunesMetadata.plist” speichern und in der ZIP-Datei ersetzen; die Dateiendung dann wieder in “.ipa” ändern.
  1. Diese Datei füttert zieht man nun in die Mediathek des alten iTunes. Et voilà, iTunes erkennt, daß es eine alte Version der App hat und will die aktualisieren.
  2. Nun geht es weiter wie in obigem Link beschrieben; dank der “iTunesMetadata.plist” ist aber bereits der Identifier der gewünschten Version bekannt und wr können etwas abkürzen:
  3. In iTunes in der Seite mit den App-Updates die gewünschte App heraussuchen. Noch nicht herunterladen.
  4. In Fiddler aufrufen: Menüleiste –>  Rules –> Automatic Breakpoints –> Before Requests, um alle HTTP-Anfragen vom Rechner einzeln zu bestätigen. Nun in iTunes bei der gewünschten App die Schaltfläche “Aktualisieren” anklicken.
  5. In Fiddler sollte es nun ein paar neue Aufträge mit rotem Icon geben. Dort muß man nun die Abfrage finden, die mit der Domain p32-buy.itunes.apple.com und der URL, die mit /WebObjects/MZBuy.woa beginnt, verknüpft ist. Die Domain kann sich von Zeit zu Zeit ändern, wichtig ist es, die URL zu finden, die mit /WebObjects/MZBuy.woa beginnt (direkt mit dem grünen Play-Button erlauben, wenn es “tunnel to” ist). Der Eintrag “SoftwareVersionExternalIdentifiers” muß nun auf denjenigen geändert werden, der oben als zur gewünschten Version gehörig definiert wurde. Dann den Abfangmodus über Menüleiste – Regeln – Automatische Haltepunkte – Deaktiviert ausschalten und auf die grüne Schaltfläche klicken, um die Anfrage zuzulassen. Auch alle anderen Anforderungen mit roten Etiketten zuzulassen.
  6. iTunes lädt nun die alte Version der App. iTunes und Fiddler müssen dabei offen bleiben, bis der Download der App abgeschlossen ist. Und die App kann man dann wieder ins neuere iTunes importieren.