iOSアプリの過去の任意のバージョンをダウンロードする画期的な方法
2015/12/12
価値ある情報をユーザー視点で発信するブログ
2015/12/12
※この記事は、 Hiraku さんの「How to download legacy versions of iOS apps」を参照して書きました。
iOSアプリを、自分で意識して保存しておいた.ipaファイルなしにダウングレードできないことは皆さんご承知のことだと思います。
とはいうものの、新しいバージョンにおいて発現した致命的なバグ、あるいは新しいバージョンにおいて重要な機能が廃止になるなどの理由で、iOSアプリのダウングレードが必要だと思う機会は少なくありません。
TimeMachineを常に利用している環境かつ、iTunesとの同期を欠かしていない場合においては、.ipaファイルを明示的にバックアップしていなくても、TimeMachineのバックアップをたどれば過去のバージョンの.ipaファイルを得ることができます。
しかしながら、ほとんどの方はTimeMachineを使ったバックアップを取っていないことでしょう。
実は、そんなケースにおいても、iOSアプリのバージョンを過去に遡ってダウンロード可能な方法があるのです。今回は、その方法を紹介します。
このチュートリアルはOS Xを対象に書いていますが、今回の手法で使うソフトウェア「Charles」(シェアウェア)にはWindows版もありますから、Windowsでの再現は容易でしょう。
Windowsでは、同種の代替ソフトウェア「Fiddler」(フリーウェア)を使うこともできます。何らかの理由でそちらを使う場合は、こちらのチュートリアル が参考になります。(続きは[Read More]から)
このチュートリアルでは、Facebookアプリの初期バージョン、v1.0をダウンロードする例を取り上げます。手順をスタートする前に、Charlesをダウンロードし、インストールしておく必要があります。
前述の通り、代替となるフリーウェアのFiddlerを使うこともできますが、FiddlerはWindows用でOS Xで動作しません。それがシェアウェアのCharlesを使う理由です。
Charlesはシェアウェアですが、30日間無料で試用可能ですから、試用期間中に購入するかどうか検討できます。
Charlesをインストールしたら、それを起動します。起動すると、「Automatic Mac OS X Proxy Configuration」というタイトルのダイアログが表示されますが、そこでは「Grant Privileges」ボタンを押下。
続いて「In order to automatically configure your Network Settings これを許可するにはパスワードを入力してください。」というダイアログが表示されるので、パスワードを入力して「OK」ボタンを押下。
「Mozilla Firefox Proxy Configuration」というタイトルのダイアログは、今回のチュートリアルにかかわるものではないので、「Cancel」ボタンを押してキャンセルしても構いません。
Charlesが起動したら、そのままにしておきます。
続いては、iTunes上のFacebookアプリを削除します。後でそれを再ダウンロードするためです。削除しておかないと、次のステップで操作が必要な「ダウンロード」ボタンを表示することができません。
それでは、FacebookアプリをApp Storeからダウンロードしましょう。これから、Facebookアプリを3回再ダウンロードすることになります。詳細は後述します。
iTunesのAppタブ内のApp Storeタブに切り替え、検索のテキストフィールドにfacebookと入力して検索。Facebookアプリが見つかったら、ダウンロードボタンを押下。
ダウンロードが始まったら、ウインドウの右上にダウンロードのキューが表示されますので、ポップアップウインドウを表示し、ダウンロードをできるだけ早く中止します。中止したら、Facebookアプリのダウンロードキューを選択してからDeleteキー2回押しでキューを削除。
Charlesに切り替え、左のサイドバーを確認。名前が「https://pxx-buy.itunes.apple.com」という項目が出現しているはずです。この項目を右クリックし、「Enable SSL Proxying」と「Breakpoints」にチェックを入れておきます。
再度Facebookアプリのダウンロードをします。既にダウンロードキューから削除したにもかかわらず、iTunesがFacebookアプリのダウンロード中であることを示していて再ダウンロードできなければ、一度App Storeの別のページを表示してから再度やり直します。
ダウンロード開始時に「the certification is not valid」というダイアログが表示されたら、「continue」ボタンないしはそれに準じたボタンを押して継続します。
最初は、ダウンロードリクエストのAppleへの送信。このときは「execute」ボタンを押して先に進めます。
表示内容が更新されたら、それはAppleのサーバからの「応答」が返ってきたことを意味するので、データを確認します。確認方法は、「Edit Response」タブを選択、さらに、「XML Text」タブを選択です。内容を下方にスクロールし、「softwareVersionExternalIdentifiers」というキーの中にある、下掲の画像内にあるようなバージョン番号のリストがあればビンゴ。これが欲しい情報です。これをコピーして保存しておきます。保存したら「abort」ボタンを押してダウンロードを中止します。
なければ、出てくるまで「execute」ボタンを押して次に進めていきます。「softwareVersionExternalIdentifiers」は、「request → response → request → response」で2往復目の「response」に含まれていると思います。
「softwareVersionExternalIdentifiers」の中身は、v1.0などのいつも見るバージョン番号とは違うものです。ここを見て分かることは、より大きな数字が新しいバージョンを意味するということです。
従って、特定のバージョンのアプリをダウンロードするには、該当するバージョンに当たるまで、何度も次なる手順「アプリのダウンロード(3回目)」を繰り返す必要があります。
iOS 9上には「bitcode」と呼ばれる新しいフィーチャーがあります。「bitcode」のある環境下では、アプリの1つのバージョンは複数のビルド番号を持っているので、希望するバージョンを探すのはより困難になります。あなたができるのは、とにかくトライ&エラーをすることだけです。
今回は、最初のバージョンv1.0をダウンロードすることが目的ですので、得られたバージョンリスト先頭で、一番小さい数字「18372」を使います。これが恐らくv1.0に相当するバージョン番号のはずです。
さて、3度目のアプリのダウンロードです。これが本番です。
このステップでは、前のステップで確認した「response」の代わりに「request」を編集することになります。Charlesが「request」を送る段になったら、「Edit Request」タブを選択、さらに「XML Text」タブを選択し、「ppExtVrsId」というキーがないか探します。あったら、その直下の数字を前のステップで得たバージョン番号「18372」に置き換えます。
そして、タスクが終了するまで何度も「Execute」ボタンを押します。(あるいは、「Breakpoints」ボタンを押してブレークポイントをキャンセルします)
すると、iTunesでFacebookアプリのダウンロードが開始されます。ついに、v1.0のFacebookアプリのダウンロードに成功しました!
いつでもアプリの過去のバージョンをダウンロードできるとは、何という開放感でしょうか。この手法を知っていれば、理不尽なバグや変更を怖がることなく、最新バージョンへのアップデートを試みることができますね。
この記事は、Hiraku (@hirakujira) さんの「How to download legacy versions of iOS apps」を参照して書きました。Hirakuさん、有用な記事の公開ありがとうございます。