業務で作ってるアプリの長いビルド中にTwitterをチラ見していたらとあるツイートが目に入りました。
1buildで指定のSimulator全部にappを突っ込む方法欲しい…修正されているかの画面確認でbuildして確認してsimlator変えてbuildして…ってつらい
— ありぜ (@a_aryzae) 2018年5月24日
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...] |
実行すると下記の様にアプリがインストールされた状態で複数のシミュレータが起動します。
まとめ
前から同じ様に不便を感じていた部分が他人も困ってるんだなと思った事でCLIツールを作成する後押しをしてくれました。
同じ様な事で困ってる人がいましたら是非使ってみて下さい。
ツイートを見てから3時間程度で作った荒削りなツールなので色々バグなどあるかもしれませんが、見つけたらIssueやPR待ってます。
もし、気に入って頂けましたらいいねやスター🌟を頂けると嬉しいです。