LoginSignup
8
3

More than 3 years have passed since last update.

XCUITestをDark Modeで実行する方法

Posted at

fastlane snapshot などを用いているときにXCUITestをダークモードの状態で起動し、スクリーンショットを撮影したい場面があると思います。

LaunchArgumentsの指定による方法などでシミュレータを強制的にダークモードにして起動できると良いのですが、今の所そのような方法が見つかっていません。

ワークアラウンドとして以下のような手法を使うとうまくいっているため紹介します。

手順1: launchArguments に何らかのフラグを付与

func testDarkmode() {
    let app = XCUIApplication()
    app.launchArguments.append("darkmode")
    app.launch()
    ...
}

アプリ側で分岐ができれば方法は何でも良いです。

手順2: UIWindow.overrideUserInterfaceStyleを書き換え

SceneDelegate.swift
let window = UIWindow(windowScene: windowScene)

...

if ProcessInfo.processInfo.arguments.contains("darkmode") {
    window.overrideUserInterfaceStyle = .dark
}

コードで強制的にダークモードを使う方法として、 overrideUserInterfaceStyle を使う方法がすぐに見つかると思います。

ここで rootViewControllerの overrideUserInterfaceStyle を書き換えようとしてしまいがちなのですが、その場合presentなどで画面遷移が起こった先でダークモードを維持することができません。
しばらく悩んだのですが、UIViewにも同じ overrideUserInterfaceStyle が生えておりそちらのドキュメントに答えが書いてありました。

UIWindowのそれにセットすればそのウィンドウ下をすべてダークモードにすることができるようです。
晴れて画面遷移した先でもダークモードを維持することができました。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3