ChatGPT解决这个技术问题 Extra ChatGPT

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

在开发 iOS 应用程序时,我需要在模拟器中使用暗模式选项对其进行测试,以便更清楚地了解应用程序 UI。但是当我进入设置时,我没有得到暗模式选项作为真实设备显示。


A
Ashley Mills

在设置中,向下滚动到开发人员,然后是深色外观…

https://i.stack.imgur.com/1JLsL.jpg

更新

除了上述之外,现在还有许多其他方法可以在模拟器中启用深色外观,如下面的许多出色答案所示。

• 从 Xcode 更改环境覆盖 (@AshCameron)

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

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

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

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

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


A
Ash Cameron

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

https://i.stack.imgur.com/H3Zwh.png


很好的答案。也很高兴看到所有其他尺寸和可访问性的东西,使其在开发时变得如此之快
很好👍我永远不会点击那个没有标记的按钮。
我认为这应该是公认的答案,简短而方便,而不是通过多个菜单。
提示:如果您在前台有模拟器,通过 Xcode,您可以在 Xcode 中按住 Command 并单击该按钮(以及该面板中的任何开关)以更改设置,同时将模拟器保持在前面!信用:WWDC 国情咨文 iirc
请注意,这仅在您从 Xcode 主动运行应用程序时才有效——一旦您停止会话,您就不能使用此方法。然而,在实践中,我发现我仍然经常想打开一些我知道我已经安装在模拟器上的应用程序......并切换到亮/暗。为此,⇧ ⌘ A 仍然最有效!
p
pkamb

您可以使用 Simulator 菜单中的“Toggle Appearance”(ShiftCommandA)设置:

模拟器 > 功能 > 切换外观⇧⌘A

https://i.stack.imgur.com/F4XhO.png


Thnx,它帮助很大。
到目前为止最简单的选择
似乎:Simulator 菜单中的 Toggle Appearance ⇧⌘A 在 Xcode 13(2022 年 6 月)和新 Xcode 14 中都完全损坏
A
AEM

自动外观更改🦉

Xcode 11.4 🌟

Apple 发布了一个强大的 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[@]}"

从 Xcode 11.4 开始,Simulator.app 和 xcrun simctl ui 命令直接支持这一点。
是的,看到了这一点-我会在测试完所有内容后立即更新答案👍自动化仍然很好-尤其是对于自动化测试。新的 simctl 设置将使上面的代码更容易。
p
pkamb

或者,您也可以通过编程方式切换外观 (docs):

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

J
Jayprakash Dubey

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

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

打开设置应用程序选择开发者启用深色外观

https://i.stack.imgur.com/XFaMa.png

解决方案 2:以编程方式

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

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

https://i.stack.imgur.com/jbCyS.png

查看此 apple docs 了解更多详情。


很棒的答案。帮助很大。在某些情况下,从模拟器菜单切换外观对我不起作用,但从设置中可以!
t
tadija

从终端:

xcrun simctl ui booted appearance light

xcrun simctl ui booted appearance dark

允许仅代码答案,但也鼓励解释答案。考虑添加一些解释。