如何在模拟器iOS 13中使用暗模式?


164

在开发iOS应用程序时,我需要在具有暗模式选项的模拟器中对其进行测试,以便我可以更清楚地了解应用程序UI。但是,当我转到“设置”时,我无法获得黑暗模式下的显示为真实设备的选项。

Answers:


298

“设置”中,向下滚动到“ 开发人员”,然后向下滚动至“ 黑暗外观” ...

在此处输入图片说明


更新资料

除上述内容外,现在还有许多其他方法可以使模拟器具有深色外观,如下面的许多不错的答案所示。

•从Xcode更改环境替代(@AshCameron)

A从“模拟器”菜单切换外观(@ Shredder2794)

•使用xcrun simctl ui booted appearance …(@ blackjacx,@ tadija)从命令行进行更新

•以编程方式使用overrideUserInterfaceStyle = .dark(@thisIsTheFoxe)

UIUserInterfaceStyle在您的info.plist中指定(@DhavalGevariya)

•使用Curtis Herbert的SimGenie… https: //simgenie.app 


78

您可以像这样切换界面模式(即,亮/暗)以及动态调整动态类型设置(在运行模拟器时):

Xcode的暗模式


好答案。也很高兴看到所有其他大小和可访问性的内容,从而使开发过程变得如此之快
Matt Fletcher

3
很好👍我永远也不会点击该未标记的按钮。
沃兹

3
我认为这应该是公认的答案,简短易用,而不是通过多个菜单。
Heckscheibe

6
提示:如果您在Xcode的上方有Simulator,则可以在Command中单击并单击Xco​​de中的该按钮(以及该面板中的任何开关)以更改设置,同时将Simulator置于前面!信用:WWDC iirc工会状态
Graystripe

13

自动外观更改🦉

Xcode 11.4🌟

苹果发布了功能强大的Xcode更新,其中包含有关此主题的一些有用信息。现在可以直接在模拟器中选择外观。只需选择Features > Toggle Appearance或⇧+⌘+A。自动外观切换可能仍然很重要,例如,对于命令行上的自动屏幕截图测试。使用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

不再需要杀死或重新设置模拟器,这是一个巨大的性能胜利。也不再需要摆弄任何plist工具了。请记住,您必须使用在运行时中可用的设备ID。使用找到它们xcrun simctl list

另请参阅我的完整脚本:https : //github.com/Blackjacx/Scripts/blob/master/set-simulator-style.sh

Xcode 11.3

有一种使用命令行的方式可以在亮和暗模式之间切换模拟器。如果您的阵列具有设备ID,则可以执行以下操作:

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

如果要在脚本中指定设备名称(由于不同机器上的设备ID有所不同),您还可以使用以下bash代码轻松找到它们的ID:

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[@]}"

1
从Xcode 11.4开始,Simulator.app和xcrun simctl ui命令直接支持此功能。
russbishop

1
是的,看到了这一点-我将在测试完所有内容后立即更新答案👍自动化仍然很好-尤其是对于自动化测试。新的simctl设置将使上面的代码更加容易。
blackjacx

11

您可以从“模拟器”菜单下拉菜单(Shift-Command-A)中使用“切换外观”设置:

在此处输入图片说明


9

另外,您还可以通过编程方式(docs)切换外观:

override func viewDidLoad() {
    super.viewDidLoad()
    #if DEBUG
    // change the appearance only while testing  
    overrideUserInterfaceStyle = .dark
    #endif
}

4

有两种方法可以在Simulator中启用暗模式。注意:请确保您使用的是iOS 13模拟器。XD

解决方案1: 更改构建设置

  1. 打开设置应用
  2. 选择开发商
  3. 启用深色外观

屏幕截图1

解决方案2:以 编程方式

只需在您的ViewController文件中添加此代码块。

override func viewDidLoad() {
    super.viewDidLoad()
    #if DEBUG
    // This changes appearance only for debug mode
    overrideUserInterfaceStyle = .dark
    #endif
}

屏幕截图2

检查此苹果文档以获取更多详细信息。


0

您也可以使用此行切换暗模式,只需将这些行放入info.plist文件中

<key>UIUserInterfaceStyle</key>
<string>Dark</string> //Light

0

从终端:

xcrun simctl ui booted appearance light

xcrun simctl ui booted appearance dark

只允许使用代码答案,但也建议您解释答案。考虑添加一些解释。
zonksoft
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.