ぽんぽこ日記

プログラミング、読書、日々の生活

iOSシミュレータを複数起動できるfbsimctlでデバッグがはかどる件

筆者は現在、ある種のグループウェア的な要素をもつアプリを開発しています。(開発は一段落し、近日リリースされる予定なので、別途おしらせします。)

追記:リリースされました

ponpoko1968.hatenablog.com

このアプリはfacebook認証をベースとしてfacebookの友達同士でコミュニケーションをとるアプリであるため、テスト・デバッグには複数のテスト用facebookユーザを使う必要がありました。

テスト用アカウントの作り方はこちらに詳しく書いてあります。

developers.facebook.com

開発に当たり、複数ユーザが参加している状態を再現しようとすると、Xcodeから起動できるiOSシミュレータは1インスタンスのみであるため、実機を複数個確保して、異なるユーザアカウントでログインする必要があります。

2台3台ならまだしも、筆者は個人開発者であるため、利用できる端末には限りがあります。そのため、このアプリの開発チームのメンバーにデバッグ版のアプリを配布して、多人数利用時のテストに協力してもらうような体制で進めていました。

しかし、メンバーの時間と予定を何度も確保するのはなかなか大変です。

そんななか、facebookがオープンソースで公開している、FBSimulatorControlというフレームワークを偶然見つけました。

github.com

読んで字のごとく、このフレームワークはiOSシミュレータを制御するためのもので、以下のようなことが出来ます。

  • シミュレータの作成(OSバージョン、機種などを選べる)

  • 複数シミュレータの同時起動(起動時にウインドウの大きさ、ロケールを指定可能)

  • アプリのインストール

  • アプリの起動

  • URLの起動

  • シミュレータのシャットダウン

このソフトウェアのリポジトリには、fbsimbtlという単体コマンドラインツールもついていて、上記の機能がCUIから簡単に利用できます。

たとえば、下の画面のように、シミュレータのインスタンスを6台分作成して、それぞれに異なるfacebookアカウントを一気に設定するなんてことが出来ます。

f:id:ponpoko1968:20160906185339p:plain

インストール方法

homebrewで簡単にインストールできるようです。(筆者はソースからコンパイルしましたが)

# Get the Facebook Tap.
brew tap facebook/fb
# Install fbsimctl from master
brew install fbsimctl --HEAD

使い方

利用可能なシミュレータを列挙
$  fbsimctl list
37131813-0450-4ED4-B45D-C1EF890ED01F | iPad Retina | Shutdown | iPad Retina | iOS 9.3
F1AD52ED-FED8-410B-82E2-4F927479E331 | iPad Pro | Shutdown | iPad Pro | iOS 9.3
(略)
シミュレータを起動
fbsimctl <UDID1> <UDID2> ... boot

シミュレータを起動します。listで表示した各シミュレータの第1カラム、UDIDを指定して起動します。

シミュレータをシャットダウン
fbsimctl <UDID1> <UDID2> ... shutdown

シミュレータをシャットダウンします。UDIDを指定しない場合は、fbsimctlで起動したすべてのシミュレータをシャットダウンします。

アプリを起動
fbsimctl <UDID1> <UDID2> ... launch <bundle-identifier>

<bundle-identifier>で指定したアプリを起動します。

アプリをインストール
fbsimctl <UDID1> <UDID2> ... install <app-name>.app

アプリをインストールします。ちなみに、シミュレータ用のアプリは通常、

~/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphonesimulator/に出来ているはずです。

制限事項

当然ながら同時に起動できるシミュレータには限りがあります。今回開発中のアプリではシミュレータは6台起動できました。このうち4台まではアプリを起動できたものの、5台目以降はアプリが起動できず、Mac(iMac (Retina 5K, 27-inch, Late 2015) 32GB)本体でもプロセスを起動できなくなりました。