読者です 読者をやめる 読者になる 読者になる

iOSシミュレータ用にビルドされたアプリを、テスト用に配布する方法

Facebook Login Review

自作のiOSアプリから、アプリ側で自動編集した定型的な内容をFacebookに投稿したい場合、publish_actionsというパーミッションが必要です。

アプリがpublish_actionsを使えるようにするためには、FacebookにLogin Reviewを申請して、承認を得なければならなくなりました。
Login Reviewの申請方法については、以下のページに説明されているので、詳細はそちらを参照してください。

developers.facebook.com

Login Reviewの際には、アプリを使ってFacebook認証をする手順をStep by Stepで、動画も添付して説明することが求められますが、それだけではなく実際に動作するアプリのバイナリを提出することも必須となっています。
iOSアプリの場合は、シミュレータで動作する.appをZIPアーカイブしたものを申請フォームからアップロードします。そのための手順が、以下のページで説明されています。

developers.facebook.com

シミュレータ用にビルドする

ZIPアーカイブの作成

上記では、以下のコマンドで、シミュレータ用にビルドされたアプリのバイナリをZIPアーカイブすることができると説明されています。

$ ditto -ck --sequesterRsrc --keepParent \
`ls -1 -d -t ~/Library/Developer/Xcode/DerivedData/*/Build/Products/*-iphonesimulator/*.app | head -n 1` \
path/to/YourApp.zip

ここで注意しないといけないのは、上記では単純に最後に更新された.appを選択するので、必ずしも目的のものがアーカイブされるとは限らないということです。例えば、WatchKit Extentionが含まれたアプリの場合は、そちらが対象となってしまうことがありえます。
確実に目的のアプリのアーカイブを作成するためには、目的の.appの名前でフィルターする必要があります。

以下に、アプリの.appが、MyTestApp.appの場合の例を示します。

$ ditto -ck --sequesterRsrc --keepParent \
`ls -1 -d -t ~/Library/Developer/Xcode/DerivedData/*/Build/Products/*-iphonesimulator/*.app | grep MyTestApp.app | head -n 1` \
/tmp/simbuild/MyTestApp.app.zip

シミュレータにインストールして実行

次に、ここでできたファイルを、実際にシミュレータにインストールして実行する方法が説明されていますが、その場合には、ZIPアーカイブされていない.appが必要です。上記から、"-ck --sequesterRsrc --keepParent"をはずすと、単なるファイルコピーになるので、まずそれを実行して、動作確認してからZIPアーカイブを作成する方が、手順としては素直な気がします。
尚、コマンドラインからシミュレータを操作する場合は、Facebookの手順で説明されている、phonegap/ios-sim · GitHub が便利なので、それをベースに説明してみます。(iso-simは、Homebrewからも、"brew install ios-sim" で、インストール可能です)

github.com

(1) 目的の.appを、作業用ディレクトリにコピーします。
$ ditto `ls -1 -d -t ~/Library/Developer/Xcode/DerivedData/*/Build/Products/*-iphonesimulator/*.app | grep MyTestApp.app | head -n 1` /tmp/simbuild/MyTestApp.app
(2) シミュレータに登録されているデバイスを確認します。
$ ios-sim showdevicetypes
…
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 9.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 9.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 9.1
com.apple.CoreSimulator.SimDeviceType.iPhone-6, 9.1
com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 9.1
com.apple.CoreSimulator.SimDeviceType.iPhone-6s, 9.1
com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus, 9.1
com.apple.CoreSimulator.SimDeviceType.iPad-2, 9.1
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 9.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 9.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air-2, 9.1
com.apple.CoreSimulator.SimDeviceType.iPad-Pro, 9.1
…
(3) 上記の中から、テストするデバイスを選んで、アプリをシミュレータにインストールして起動します。

('com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus, 9.1'を選んだ場合の例)

$ ios-sim launch /tmp/simbuild/MyTestApp.app  --devicetypeid 'com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus, 9.1' --exit

ここで、正しく実行されることが確認できたら、ZIPアーカイブを作成します。

テスト用に配布する(応用)

あと、これを書きながら気付いたのですが、この方法に従うことで、シミュレータ用に作成されたアプリをテスト用に配布することができますよね。ちょっと動きのイメージを見てもらったりする目的であれば、使えるかもしれませんね。