python と ngrok を使用して ipa を素早く OTA 配信する

開発中の iOS アプリを OTA で配信する場合、SSL に対応した配信用のサーバーが必要になります。 正式に運用されているアプリであればサーバーを用意すれば良いのですが、実験的に作ってみたアプリや小規模に配布したいアプリの場合には SSL 対応したサーバーを用意するのも大変です。

しかし、python のローカルサーバー機能と ngrok を組み合わせることで、専用の配信用サーバーを用意しなくても手軽に OTA 配布を行うことができます。

この記事では python と ngrok を活用してアプリを OTA 配信する方法について説明します。

ファイルを用意する

OTA 配信に必要となるファイルを用意します。

1) ipa ファイル

配信したいアプリの ipa ファイルです。


2) manifest.plist ファイル

Xcode から ipa ファイルを出力する際に、同時に出力することができます。 ファイルの形式を知っているのであれば手動で作成することもできます。

Sample manifest for OTA · GitHub


3) index.html ファイル

このファイルは必須ではありませんが、ユーザーがアプリをダウンロードしやすいように用意します。 manifest.plist ファイルをダウンロードさせるために以下のようなリンクを記述します。

<a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">ダウンロード</a>

これらのファイルをまとめて同じディレクトリに格納します。

python のローカルサーバーを起動する

macOS には標準で python がインストールされています。 ファイルをまとめたディレクトリに移動して、以下のコマンドを実行します。

python -m SimpleHTTPServer 8080

ローカルサーバーが起動して、ディレクトリが公開されました。 ブラウザで以下のURLにアクセスするとディレクトリの内容が表示されます。

http://localhost:8080

ngrok でローカルサーバーを公開する

1) ngrok のインストール

ngrok を使用するとローカルサーバーを Web に公開することができます。 ここでは brew を使用してインストールします。

brew cask install ngrok


2) ngrok でサーバーを公開する

インストール完了後、以下のコマンドを実行します。 python のローカルサーバーを 8080 番ポートで公開したので、ngrok で 8080 版ポートをWebに公開します。

ngrok http -bind-tls=true 8080

成功すると以下のような表示になり、ローカルサーバーが Web からアクセス可能となります。

Session Status                online                                            
Version                       2.2.8                                             
Region                        United States (us)                                
Web Interface                 http://127.0.0.1:4040                             
Forwarding                    https://178c064e.ngrok.io -> localhost:8080       
                                                                                
Connections                   ttl     opn     rt1     rt5     p50     p90       
                              0       0       0.00    0.00    0.00    0.00     

Forwarding に記載してある ngrok の URL が Web からアクセスするための URL になります。 ブラウザでアクセスするとローカルサーバーで公開しているディレクトリの index.html が表示されます。

アプリをインストールする

(1) iOS デバイスで ngrok のアドレスにアクセスします。

(2) index.html が表示されるのでリンクをタップします。

(3) アプリのダウンロードが開始されます。

ngrok のファイル転送速度はあまり早くないので、ipa ファイルのダウンロードを完了するまでには数分かかる場合があります。

ローカルサーバーと ngrok を停止する

python のローカルサーバー、ngrok どちらもターミナルで Ctl + C を入力すると停止します。



iOS OTA Helper の紹介

ここまでの作業を自動化する iOS OTA Helper というアプリを作成しました。

github.com

ipa ファイルをドラッグ & ドロップするだけで自動的にインストールページを作成し、ローカルサーバーと ngrok を起動してアプリの OTA 配信を開始します。

f:id:watanabetoshinori:20180615195526p:plain f:id:watanabetoshinori:20180615195538p:plain

OTA 配信が開始されると QR コードが表示されるので、それを iPhone から撮影してインストールサイトにアクセスします。

f:id:watanabetoshinori:20180615195556p:plain