iOS Simulatorを管理するsimctlにはスクリーンショットやビデオ録画を行えるオプションioが存在します。

スクリーンショットについてはXCTestがXCode9でサポートしているため、あまりsimctlで行うことはないかもしれません。

しかし、画面のスクリーンショットでは画面遷移時などのアニメーションについてどのように表示されたか分かりにくいという点があります。
そこでUI Test時の画面をビデオ録画する方法を試してみました。

simctl ioコマンドについて

具体的にsimctlを使った録画の方法は以下のようになります。

$ xcrun simctl io デバイス名 recordVideo 動画ファイル名

コマンドを実行後録画が始まり、録画を終了する際はCTRL+Cで録画を終わります。

// 実行例
$ xcrun simctl io 'iPhone SE' recordVideo uitest.mov
...
pics: 357, gop size in sec: 30.000000
Recording... (Press CTRL+C to stop)
^C
Recording completed.

UI Testの動画を撮影する

次に実際にxcodebuild testを実行し、その際の動画を撮影してみます。
ざっくり言えば以下の手順をコードに落とし込む必要があります。

  1. simctlで録画開始
  2. UI Test実行
  3. テスト完了後に録画終了

今回は私はPythonで書いてみました。

# uitest_with_video_record.py

import subprocess
import signal

video_record = subprocess.Popen("xcrun simctl io 'iPhone SE' recordVideo uitest.mov", shell=True)
xcodebuild_test = subprocess.run("xcodebuild test -scheme VideoRecordingOfUITestUITests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone SE,OS=11.1'", shell=True)
video_record.send_signal(signal.SIGINT)

これを実行するとUI Testが始まり、完了後にsimctlの録画が終了され、uitest.movという動画ファイルが生成されるわけです。

$ python uitest_with_video_record.py

生成された動画

uitest_half.gif

課題🤔

かなり適当にpython書いてしまったのでシミュレータの起動中も動画が録画されてしまってます。
xcodebuildの標準出力を監視してテストが開始される適切なタイミングで録画開始が出来るように改善したい。
デバイス名やファイル名などもちゃんとパラメタで受け取ったり出来るようにしたいですね。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.