App Storeからダウンロードしたアプリのバージョンを最新に保つことは、セキュリティ、機能改善にも役立つことですが、時にアップデートしたことによる不具合に見舞われることがあります。その場合は、今回ご紹介する方法を使用して、任意の古いバージョンをiPhoneにダウンロードできますのでお試しください。
App Storeから古いバージョンのアプリケーションをダウンロードする
少々、長い行程で面食らいますが、慣れてしまえば同じことの繰り返しですので簡単です。ぜひ、最後までご覧いただければと思います。
iTunesのバージョンについて
iTunes 12.7以降のバージョンにおいては、iTunesからApp StoreおよびAppの管理機能が廃止されました。今回ご紹介する方法をお試しする場合には、企業環境で iTunes を使って App を配布する - Apple サポートから、iTunes 12.6.3をダウンロードしてインストールしてください。
Charlesのダウンロード
Charlesは、HTTPプロキシ、HTTPモニター、リバースプロキシとして機能するソフトウェアで、端末⇄サーバ間のHTTP、およびHTTPSのリクエストと応答をモニターリングできます。Charlesは有償ソフトウェアですが、30日間は無料で試用できます。こちらのリンクから、試用版のCharles**をダウンロードしてください。
Charlesのインストール
Charlesをダウンロードし、ディスクイメージ(dmg)ファイルをダブルクリックすると、ライセンスが表示されますので「Agree」ボタンをクリックします。
「Charles.app」を「Applications」にコピーすると、インストールは完了です。
Charlesの起動
Charlesがネットワークモニターとして機能するために、権限を求められるため「Grant Priviliges」をクリックします。これは、Charlesの初回起動時のみ求められます。
権限の付与には管理者権限が必要であるため、管理者のユーザ名とパスワードを入力します。
以上で、Charlesの起動は完了です。上図に示すボタンをクリックすることで、CharlesによるHTTPプロキシのオン、オフの切り替えを行うことができます(赤くなっていればプロキシがオンの状態)。
Charlesで古いアプリケーションをダウンロードする
ここからは、Charlesを使用してiTunes Storeから古いバージョンのアプリケーションをダウンロードする方法をご紹介します。
①目的のアプリケーションをダウンロードする
Charlesを起動し、HTTPプロキシをオンにします(起動時にはデフォルトでオンになっています)。続いて、iTunesを起動し、App Storeから目的のアプリケーションをダウンロードします。今回は、Facebookを対象とします。
②CharlesのSSLプロキシを有効化する
Mac⇄App Store間のHTTPS通信をモニターリングするためには、SSLプロキシを有効化する必要があります。また、HTTPS通信をモニターリングするためにはCharlesの証明書をシステムにインストールする必要があります。Charlesの証明書がインストールされていない状態で、App Storeからアプリをダウンロードしようとすると、「““を購入できませんでした。安全なネットワーク接続を確立できませんでした。このサーバの証明書チェーンは不正です」と警告が表示されます。
Charlesを起動したら、「Help」→「SSL Proxying」→「Install Charles Root Certificate」を選択します。
「OK」ボタンをクリックします。すべてのユーザで有効にしたい場合は、「キーチェーン」を「システム」にします。これで、キーチェーンにCharlesのルート証明書が追加されます。SSL通信時にこの証明書が使用されるようになりますが、最新のmacOSでは未知の証明書は使用できないようになっているため、キーチェーンアクセスから有効化します。「アプリケーション」→「ユーティリティ」→「キーチェーンアクセス.app」を開きます。
「Charles Proxy CA」というルート証明書を探します。「このルート証明書は信頼されていません」と表示されている場合には、その証明書をダブルクリックしてください。
「信頼」というプルダウンをクリックし、「この証明書を信頼するとき」を「常に信頼」に変更してください。これで、Charlesを使用している際に、App StoreとのSSL通信をモニターリングできるようになります。
続いて、App Storeから目的のアプリケーションをダウンロードします。Charlesの左ペインの「Structure」タブからhttps://**-buy.itunes.apple.com
(**は任意の英数字)を見つけ、HTTPS通信のモニターリングを有効化するために、右クリックして「Enable SSL Proxying」をクリックします。これで次回以降、App Storeに対するHTTPS通信をモニターリングすることができるようになりました。
③目的のアプリケーションをダウンロードする(2回目)
iTunesから、①でダウンロードしたアプリケーションを削除し、再度同じアプリをApp Storeからダウンロードします。
④アプリケーションの情報を取得する
Charlesの左ペインの「Structure」タブから「https://**-buy.itunes.apple.com
」を再度見つけます。この時、鍵マークが付いていないことを確認してください。三角形のマークをクリックして展開していくと、WebObjects
→MZBuy.woa
→wa
→buyProduct
が見つかります。
右側ペインにおいて、上部を「Contents」、下部を「XML Text」に変更してsoftwareVersionExternalIdentifiers
のキーワードを検索してください。(⌘+Fでこのキーワードで検索すると便利です)
ここに表示されている番号が、アプリケーションのバージョンを一意に識別する番号になります。古い番号ほど、古いバージョンのアプリケーションになります。ただし、このままでは、アプリケーションのバージョン情報がわかりませんので、再度Charlesで確認します。
続いてbundleShortVersionString
で検索します。ここに表示されている文字列が上記のsoftwareVersionExternalIdentifiers
に対応するバージョンになります。今回の場合は、「157.0」です。
⑤古いバージョンのアプリケーションをダウンロードする
いよいよCharlesを使用して古いバージョンのアプリケーションをダウンロードします。事前にiTunesからダウンロードしたアプリケーションを削除しておきます。左ペインのWebObjects
→MZBuy.woa
→wa
→buyProduct
を右クリックして、「Breakpoints」をクリックします。これで、App Storeからアプリケーションをダウンロードする際に、特定のポイントで通信が停止するようになります。
再びApp Storeに戻り、ダウンロードしたいアプリケーションをダウンロードします。Charlesに「Breakpoints」が表示されるようになります。「Edit Request」をクリックします。
画面下部から「XML Text」を選択して、XMLの先頭のappExtVrsId
の番号を書き換えます。書き換えが完了したら「Execute」をクリックします。
途中、通信が停止した場合は、再度「Execute」をクリックします。最後まで通信が完了したらダウンロードは完了です。
なお、bundleShortVersionString
からダウンロードしようとしているアプリのバージョン番号を確認できます。
これで任意のバージョンのアプリケーションをiTunes Storeからダウンロードすることができました。
再度アプリケーションをダウンロードしようとした場合、再びブレークポイントで通信が遮断されてしまうため、メニューから「Breakponts」を解除しておきましょう。
まとめ
長い道のりでしたが、道中の工程を簡単に整理すると以下のようになります。
- Charlseでアプリケーションの情報を取得する
- Charlseでダウンロードしたいアプリケーションの番号を確認する
- Charlseでブレークポイントを設定し、ダウンロードしたアプリケーションのバージョン情報に書き換えを行う
この工程を繰り返すことで、任意のアプリケーションの任意のバージョンをダウンロードすることができるようになります。あとは、iTunesとiPhoneを同期することで、古いバージョンをiPhoneに導入することが可能です。
注意点としては、すべてのバージョンがダウンロードできるとは限らない点です。あまりに古いバージョンを指定すると、サーバからエラーが返却されますのでご注意ください。