xcrun simctl uiは、iOSシミュレータのUI設定を取得・変更するサブコマンドである。
appearanceオプションを使うと、シミュレータのライト/ダークモードをコマンドラインから切り替えられる。
現在の外観を取得する
light/darkの値を指定せず実行すると、現在の外観設定を取得できる。
デバイスはUDIDで指定するほか、起動中のデバイスであればbootedが使える。
$ xcrun simctl ui booted appearance
light
取得できる値はlight、dark、unsupported(プラットフォームやランタイムが外観設定に対応していない)、unknown(設定の検出に失敗した)のいずれかである。
起動していないデバイスに対して実行するとエラーにはならず、unknownが返る。
外観を切り替える
lightまたはdarkを指定すると外観を切り替えられる。
$ xcrun simctl ui booted appearance dark
$ xcrun simctl ui booted appearance
dark
XcodeのシミュレータアプリでもFeatures → Appearanceから同様の切り替えができるが、simctl uiを使うとGUI操作なしでスクリプトから制御できる。
ライト/ダークでの見た目の違い
appearance lightとappearance darkを切り替えてホーム画面を撮影すると、ウィジェットの配色や壁紙のトーンの変化を確認できる。

活用例: スクリーンショット自動化での利用
アプリのダークモード対応を確認するスクリーンショットを自動撮影する際、appearanceでモードを切り替えてからxcrun simctl io booted screenshotで撮影すれば、手動でシミュレータのメニューを操作せずにライト/ダーク両方の画面を機械的に収集できる。
$ xcrun simctl ui booted appearance light
$ xcrun simctl io booted screenshot light.png
$ xcrun simctl ui booted appearance dark
$ xcrun simctl io booted screenshot dark.png
CIでのUIテストやfastlaneのスクリーンショット自動化と組み合わせると、リリースごとに手動確認していたダークモード対応チェックを自動化できる。
\第一線のプログラマーの行動原理を学べる!/
