[Xcode][iOS][小ネタ] シミュレータの写真アプリにコマンドで画像を足してみよう

結局 `ls | xargs xcrun simctl addmedia booted` が言いたいだけのブログです。
2020.09.15

はじめに

CX事業本部の中安です。まいどです。

画像を取り扱うようなアプリを作る場合、ユーザはカメラから撮ったり、写真アプリから選択したりして画像を引っ張ってくると思います。

シミュレータでそのあたりの動作を確認するにはカメラは使えませんので、写真アプリから選択するということになると思いますが、 シミュレータの写真アプリに画像を仕込むのって、そのままやると面倒くさいですよね。

なので、ターミナルからコマンドをポンっでシミュレータの写真アプリに画像を入れるようにしましょう。

xcrunコマンド

Xcodeがインストールされていると、xcrunが実行できるようになっていると思います。

その中のサブコマンドsimctlを使うと、いくつかのシミュレータの操作をコマンドで行うことができます。

シミュレータのUDIDを取得する

今動作させることのできるシミュレータを一覧化してみましょう。

% xcrun simctl list devices
== Devices ==
-- iOS 13.7 --
    iPhone 8 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Booted) 
    iPhone 8 Plus (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Shutdown) 
    iPhone 11 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Shutdown) 
    iPhone 11 Pro (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Shutdown) 
    iPhone 11 Pro Max (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Shutdown) 
    iPhone SE (2nd generation) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Shutdown) 
    :
    :
    :

こんな感じに取れます。

今まさに起動中のシミュレータだけを取ろうというときにはgrepを使えば抽出できますね。

% xcrun simctl list devices | grep "(Booted)"
    iPhone 8 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Booted)

このUDIDを引数にすると、色んなコマンドでシミュレータを指定して実行できるのでコピーしておくといいかと思います。

シミュレータを起動する

先程取得したUDIDを用いて、シミュレータをxcrun simctlコマンドで起動させることが出来ます。

% xcrun simctl boot XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

しかし、実行してもいつものシミュレータが画面上には表示されません。

ただ、さきほどと同じコマンドを叩いて見てください。 指定したUDIDのシミュレータが起動していることが分かります。

% xcrun simctl list devices | grep "(Booted)"
    iPhone 8 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Booted)

このように起動してるので、操作することが可能ですが、 シミュレータ自体が見えないと気持ち悪いよということであれば、GUIも含めて起動できるようにしましょう。

シミュレータをGUI込みで起動する

GUIも含めて起動する場合は、シミュレータアプリを直接オープンして、 その引数にUDIDを渡してやります。

% open -a "Simulator" --args -CurrentDeviceUDID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

% open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

このように2種類の手法があるようです。同じことをやっていますが、前者のほうがシンプルですね。

シミュレータに画像を入れる

では、起動したシミュレータに画像を入れてみましょう。

PC上にどこかのディレクトリに画像ファイルが置いてあるとします。 仮に1.jpg2.jpg3.jpgとしますね。

そしてaddmediaコマンドで追加します。

% cd 画像のあるディレクトリ
% xcrun simctl addmedia XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 1.jpg 2.jpg 3.jpg

これを実行してからシミュレータの写真アプリを見てみると、画像が入ってることが確認できると思います。

また、シミュレータが1つだけ起動してるならbootedというエイリアスを使うことができます。

% xcrun simctl addmedia booted 1.jpg 2.jpg 3.jpg

一気に入れる

こうやってチマチマと入れていくのも大変なので、ディレクトリ内にある画像を一気に入れる方法もメモっておきます。

% ls | xargs xcrun simctl addmedia booted

最後に

今回は画像だけでしたが、動画も入れることができます。

長々と書いてきましたが、 起動中のシミュレータに画像に入れるなら、最後のコマンドでドンっと入ると思います。

小ネタでした。

では、またー。