xcrun simctl uiは、iOSシミュレータのUI設定を取得・変更するサブコマンドである。 appearanceオプションを使うと、シミュレータのライト/ダークモードをコマンドラインから切り替えられる。

現在の外観を取得する

light/darkの値を指定せず実行すると、現在の外観設定を取得できる。 デバイスはUDIDで指定するほか、起動中のデバイスであればbootedが使える。

$ xcrun simctl ui booted appearance
light

取得できる値はlightdarkunsupported(プラットフォームやランタイムが外観設定に対応していない)、unknown(設定の検出に失敗した)のいずれかである。 起動していないデバイスに対して実行するとエラーにはならず、unknownが返る。

外観を切り替える

lightまたはdarkを指定すると外観を切り替えられる。

$ xcrun simctl ui booted appearance dark
$ xcrun simctl ui booted appearance
dark

XcodeのシミュレータアプリでもFeaturesAppearanceから同様の切り替えができるが、simctl uiを使うとGUI操作なしでスクリプトから制御できる。

ライト/ダークでの見た目の違い

appearance lightappearance 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のスクリーンショット自動化と組み合わせると、リリースごとに手動確認していたダークモード対応チェックを自動化できる。