mountains

iOSの実機でSystem Background Colorが意図しないColorで表示される問題に関して

iOSの開発を始めた当初、非常にこの問題に関して困惑してしまったかつ、解決方法がすぐに探せなかったので、ログとして残しておこうと思います。

開発環境

Xcode: 12.5.1
Swift: 5.4.2

何が起きているか

実際に問題の挙動が発生した状態を見ながら、説明をしていきます。
XcodeでCreate New Projectから新しいプロジェクトを作成し、何も変更していない状態です。
ビルドする前に現在のMain.storyboardを見てみると以下のようになっています。

プロジェクトを作成した時に作成されたViewControllerのViewにフォーカスが当たっている状態です。
右側のユーティリティエリアをみるとViewのBackgroundプロパティにはSystem Background Colorが選択されているのが分かります。

この状態でSimulatorでビルドをしてみると、Storyboardで確認した時同様の白い画面が表示されます。


しかし実機でビルドをして立ち上げると以下のようになります


問題の原因

こちらの記事で取り上げられている通り、

ユーザーがダークモードをオンにすると、iOS 13 SDKで構築されたすべてのアプリがダークモードで実行されます。 ダークモードに最適化する方法を学びiOS 13やiPadOSの最新ベータ版を実行しているデバイスでアプリをテストしましょう。ダークモードでアプリの見栄えを良くするためにもっと時間が必要な場合やダークモードがアプリに適していない場合は、オプトアウトする方法を学ぶことができます。

端末でダークモードがオンに設定されている場合、iOS 13 SDKで構築したアプリがダークモードで実行されてしまうみたいです。
そこで私がテストを行なっていた実機もダークモードをオフに設定した際には、Simulatorと同様の結果になりました。

Dark Modeに対応する

これでダークモードでアプリが実行されてしまう原因は分かりましたが、プロジェクトには予算などの都合上、ダークモードに対応しない場合が存在すると思います。
その場合の実装方法を紹介します。

info.plistのAppearanceを設定する

info.plistファイルのUser Interface Styleを設定するなど色々な情報が飛び回っていますが、やることとしてはinfo.plistファイルのInformation Property ListというKeyにAppearanceというKeyを追加しValueにLightを設定します。


こうすることでユーザーの端末でダークモードがオンになっていても、意図した画面を表示できます。

aji
Crea7
web/iOS DeveloperWhizzy Inc.

Crazy Like ODB、Play Like 勝新