如何在模拟器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.