While I am developing the iOS app I need to test it in simulator with dark mode option so I can get more clarity about the app UI. But when I go to the Setting I am not getting option for dark mode as real device showing.
In Settings, scroll down to Developer and then Dark Appearance…
https://i.stack.imgur.com/1JLsL.jpg
Update
In addition to the above, there are now many other ways to enable dark appearance in the simulator, as shown in the many great answers below.
• Change Environment Overrides from Xcode (@AshCameron)
• Toggle Appearance ⇧⌘A from the Simulator menu (@Shredder2794)
• Update from the command line using xcrun simctl ui booted appearance …
(@blackjacx, @tadija)
• Programmatically using overrideUserInterfaceStyle = .dark
(@thisIsTheFoxe)
• Specify UIUserInterfaceStyle
in your info.plist (@DhavalGevariya)
• Use SimGenie from Curtis Herbert… https://simgenie.app
You can toggle the interface mode (i.e. Light / Dark) as well as adjust dynamic type setting on the fly (when the simulator is running) like this:
https://i.stack.imgur.com/H3Zwh.png
You can use the "Toggle Appearance" (ShiftCommandA) setting from the Simulator menu:
Simulator > Features > Toggle Appearance ⇧⌘A
https://i.stack.imgur.com/F4XhO.png
Automated Appearance Change 🦉
Xcode 11.4 🌟
Apple released a powerful Xcode update which contains some useful things for this topic. Appearance can now be selected directly in the simulator. Just select Features > Toggle Appearance
or ⇧+⌘+A. The automatic appearance switching could stil be important, e.g. for automated screenshot tests on the command line. The script becomes easy like this when using Xcode 11.4:
device_ids=("C741F3CD-FDAC-49EA-A4DB-7F797B97291E" "428183B6-3EB8-4D36-9938-9D07C141BF49")
# The value to use is now just 'dark' or 'light'
appearance=dark
for device in "${device_ids[@]}"; do
xcrun simctl boot $device
xcrun simctl ui $device appearance $appearance
done
No more simulator killing or re-setting needed which is a huge performance win. Also no fiddling around with any plist tools anymore - ever. keep in mind that you have to use device ids that are available in the runtime you use. Find them out using xcrun simctl list
.
See also my complete script: https://github.com/Blackjacx/Scripts/blob/master/set-simulator-style.sh
Xcode 11.3
There is a way using the command line to switch a simulator between light and dark mode. If you have an array with your device IDs you can do the following:
device_ids=("C741F3CD-FDAC-49EA-A4DB-7F797B97291E" "428183B6-3EB8-4D36-9938-9D07C141BF49")
# Determine the plist value for the desired style: "dark" -> 2 / "light" -> 1
style=2
for device_id in "${device_ids[@]}"; do
plist_path="${HOME}/Library/Developer/CoreSimulator/Devices/${device_id}/data/Library/Preferences/com.apple.uikitservices.userInterfaceStyleMode.plist"
printf '\n%s' "Set style $style for device $device_id ($plist_path)"
killall "Simulator"
xcrun simctl shutdown booted
xcrun simctl erase $device_id
# Crate the plist since it might not be available after erase
[[ ! -f "$plist_path" ]] && /usr/libexec/PlistBuddy -c "save" $plist_path
# Set the style mode
plutil -replace UserInterfaceStyleMode -integer $style $plist_path
done
If you want to specify device names in your script - since device IDs are different on different machines - you can also easily find the id's of them using the following bash code:
device_names=("iPhone SE" "iPhone 8" "iPhone 11 Pro" "iPhone 11 Pro Max")
device_ids=()
for name in "${device_names[@]}"; do
id=$(xcrun simctl list --json | jq ".devices | .[] | .[] | select(.name == \"$name\") | .udid" | cut -d\" -f2)
device_ids+=("$id")
done
printf '%s\n' "${device_ids[@]}"
xcrun simctl ui
command.
Alternatively, you can also switch the appearance programmatically (docs):
override func viewDidLoad() {
super.viewDidLoad()
#if DEBUG
// change the appearance only while testing
overrideUserInterfaceStyle = .dark
#endif
}
There are two ways to enable dark mode in Simulator. Note: Make sure that you’re using iOS 13 simulator. X-D
Solution 1: Change build settings
Open Settings app Select Developer Enable Dark appearance
https://i.stack.imgur.com/XFaMa.png
Solution 2: Programmatically
Simply add this code block in your ViewController file.
override func viewDidLoad() {
super.viewDidLoad()
#if DEBUG
// This changes appearance only for debug mode
overrideUserInterfaceStyle = .dark
#endif
}
https://i.stack.imgur.com/jbCyS.png
Check this apple docs for more details.
from terminal:
xcrun simctl ui booted appearance light
xcrun simctl ui booted appearance dark
Success story sharing