筆者は現在、ある種のグループウェア的な要素をもつアプリを開発しています。(開発は一段落し、近日リリースされる予定なので、別途おしらせします。)
追記:リリースされました
このアプリはfacebook認証をベースとしてfacebookの友達同士でコミュニケーションをとるアプリであるため、テスト・デバッグには複数のテスト用facebookユーザを使う必要がありました。
テスト用アカウントの作り方はこちらに詳しく書いてあります。
開発に当たり、複数ユーザが参加している状態を再現しようとすると、Xcodeから起動できるiOSシミュレータは1インスタンスのみであるため、実機を複数個確保して、異なるユーザアカウントでログインする必要があります。
2台3台ならまだしも、筆者は個人開発者であるため、利用できる端末には限りがあります。そのため、このアプリの開発チームのメンバーにデバッグ版のアプリを配布して、多人数利用時のテストに協力してもらうような体制で進めていました。
しかし、メンバーの時間と予定を何度も確保するのはなかなか大変です。
そんななか、facebookがオープンソースで公開している、FBSimulatorControlというフレームワークを偶然見つけました。
読んで字のごとく、このフレームワークはiOSシミュレータを制御するためのもので、以下のようなことが出来ます。
シミュレータの作成(OSバージョン、機種などを選べる)
複数シミュレータの同時起動(起動時にウインドウの大きさ、ロケールを指定可能)
アプリのインストール
アプリの起動
URLの起動
シミュレータのシャットダウン
このソフトウェアのリポジトリには、fbsimbtlという単体コマンドラインツールもついていて、上記の機能がCUIから簡単に利用できます。
たとえば、下の画面のように、シミュレータのインスタンスを6台分作成して、それぞれに異なるfacebookアカウントを一気に設定するなんてことが出来ます。
インストール方法
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)本体でもプロセスを起動できなくなりました。