一度のビルドで複数のシミュレータにインストール&起動するCLIツール作った

業務で作ってるアプリの長いビルド中にTwitterをチラ見していたらとあるツイートが目に入りました。

Bluepillなどを使えば複数シミュレータを起動しながらUIテストが出来るらしいですが、確かに普通にビルドして、複数シミュレータにインストールするだけがしたいという要望もありそうだなと思いました。
fbsimctlでも良いかもしれないけど、Xcodeが複数シミュレータ起動に対応してから僕は使わなくてなりました。
とはいえ、複数シミュレータを起動して確認のはなかなか面倒な作業なので僕は下記の様な感じのシェルスクリプトを組んで実行していました。

#!/bin/sh

path=~/Library/Developer/Xcode/DerivedData/MyProject-dldoglzedhzxknefqrrzqxdnugcb/Build/Products/Debug-iphonesimulator/MyProject.app
bundleIdentifier=me.fromkk.MyProject
devices=(91E81004-7BE9-4E84-9976-F721E649D2E5 A68CEEAA-3D2A-4ADA-A9A0-6CCAC8E80983 3FEF14D2-4BB4-4759-AB28-A62B97B96140 44EE068E-D87A-4C65-96E4-2199E3C7A9AA)

open -a "Simulator.app"

function bootIfNotBooted() {
    device=$1
    numberOfBooted=`xcrun simctl list | grep $device | grep Booted | wc -l`
    if [ $numberOfBooted = 0 ]; then
        xcrun simctl boot $device
    fi
}

for device in ${devices[@]}; do
    bootIfNotBooted $device
    xcrun simctl install $device $path
    xcrun simctl launch $device $bundleIdentifier
done

個人的にはこれで十分だったんですが、インストールされているシミュレータも人によって違うしUDIDも変わるのでこのままでは他人には共有出来ないですよね。
今回これを解決する為のツールを作成してみました。

作成したCLIツール

https://github.com/fromkk/Simulators

インストール方法

インストールはREADME.mdにも記載していますが、下記の通りです。

git clone https://github.com/fromkk/Simulators.git
cd ./Simulators
make install

使い方

simulators [--project <project>] | [--workspace <workspace>] --scheme <scheme> --bundleIdentifier <bundleIdentifier> --beforeClean <beforeClean> --devices <devices> --osVersion <osVersion>

オプションはこんな感じです。

項目 説明
--project XXX.xcodeprojのパスを設定
--workspace XXX.xcworkspaceのパスを設定
--scheme schemeを設定
--bundleIdentifier bundleIdentifierを設定
--beforeClean ビルドする前にcleanするかどうか [true,false]
--devices 端末名を設定 [iPhone SE,iPhone 7,iPhone 7 Plus,iPhone X,etc...]
--osVersion OSバージョンを設定[10.3,11.3,etc...]

実行すると下記の様にアプリがインストールされた状態で複数のシミュレータが起動します。

Screen Shot 2018-05-24 at 21.10.59.png

まとめ

前から同じ様に不便を感じていた部分が他人も困ってるんだなと思った事でCLIツールを作成する後押しをしてくれました。
同じ様な事で困ってる人がいましたら是非使ってみて下さい。
ツイートを見てから3時間程度で作った荒削りなツールなので色々バグなどあるかもしれませんが、見つけたらIssueやPR待ってます。
もし、気に入って頂けましたらいいねやスター🌟を頂けると嬉しいです。