【问题标题】:How to use dark mode in simulator iOS 13?如何在模拟器 iOS 13 中使用暗模式?
【发布时间】:2020-01-19 04:05:12
【问题描述】:

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

【问题讨论】:

    标签: ios ios-simulator ios-darkmode


    【解决方案1】:

    设置中,向下滚动到Developer,然后Dark Appearance


    更新

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      您可以使用模拟器菜单中的“切换外观”(ShiftCommandA)设置:

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

      【讨论】:

        【解决方案3】:

        自动外观更改?

        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 设置将使上面的代码更容易。
        【解决方案4】:

        从终端:

        xcrun simctl ui booted appearance light
        
        xcrun simctl ui booted appearance dark
        

        【讨论】:

        • 允许只回答代码,但也鼓励解释答案。考虑添加一些解释。
        【解决方案5】:

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

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

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

        解决方案 2: 以编程方式

        只需将此代码块添加到您的 ViewController 文件中即可。

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

        查看apple docs了解更多详情。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 很好的答案。也很高兴看到所有其他大小和可访问性的东西,这使得开发时更快
            • 很好 ? 我永远不会点击那个未标记的按钮。
            • 我认为这应该是公认的答案,简短而方便,而不是通过多个菜单。
            • Protip:如果你在前台有模拟器,在 Xcode 上,你可以在 Xcode 中按住 Command 并单击该按钮(以及该面板中的任何开关)来更改设置,同时保持模拟器在前面!信用:WWDC 联盟 iirc 状态
            • 请注意,这仅在您从 Xcode 主动运行应用程序时才有效——一旦您停止会话,就无法使用此方法。然而,在实践中,我发现我仍然经常想打开一些我知道我已经安装在模拟器上的应用程序……然后切换到亮/暗。为此,⇧ ⌘ A 仍然效果最佳!
            猜你喜欢
            • 2020-03-07
            • 2019-12-03
            • 2020-02-04
            • 2021-12-02
            • 2020-01-18
            • 2020-01-30
            • 2020-01-31
            • 2020-02-26
            • 2020-05-21
            相关资源
            最近更新 更多