Xcode Swift UI测试 - 模拟器硬件键盘

12
我正在使用Xcode中的Swift自动化UI测试,并且需要在测试期间始终禁用硬件键盘。是否有一种方法可以确保硬件键盘在没有人工干预的情况下被禁用,例如使用命令行脚本?这些UI测试将在构建服务器上运行,因此手动启动模拟器并关闭硬件键盘是不可取的。
我已经查看了xcrun simctl选项以与模拟器交互,但我尚未能够弄清楚如何做我想做的事情。此外,我找到了一些SO帖子表明我尝试做的事情是不可能的,但我不确定这些帖子是否正在询问我正在询问的问题。
通过shell脚本可以将iOS模拟器的硬件键盘设置为关闭吗?

找到解决方案了吗? - Micky
2个回答

6

在 ~/Library/Preferences 中有一个包含模拟器偏好设置的 plist 文件。

要关闭硬件键盘,请确保模拟器已关闭,然后运行以下命令:

defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool no

您可以在脚本中使用 xcrun simctl 选项来关闭模拟器。

编辑

苹果在 2018-2019 年间进行了更改,我在 Stack Overflow 上找到了另外一个答案,这对我有效:

/usr/libexec/PlistBuddy -c "Print :DevicePreferences" ~/Library/Preferences/com.apple.iphonesimulator.plist | perl -lne 'print $1 if /^    (\S*) =/' | while read -r a; do /usr/libexec/PlistBuddy -c "Set :DevicePreferences:$a:ConnectHardwareKeyboard false" ~/Library/Preferences/com.apple.iphonesimulator.plist || /usr/libexec/PlistBuddy -c  "Add :DevicePreferences:$a:ConnectHardwareKeyboard bool false" ~/Library/Preferences/com.apple.iphonesimulator.plist; done

1
这会改变房间“ConnectHardwareKeyboard”,但不会影响“DevicePreferences”中的内容,所以在我的情况下,键盘仍然保持连接状态。 - JanithaR

3

对于包括XCODE 11在内的较新版本的Xcode,这很好用。 将其添加到UITest目标的预操作中作为运行脚本:

xcrun simctl shutdown ${TARGET_DEVICE_IDENTIFIER}
plutil -replace DevicePreferences.${TARGET_DEVICE_IDENTIFIER}.ConnectHardwareKeyboard -bool NO ~/Library/Preferences/com.apple.iphonesimulator.plist

我现在正在尝试使用Xcode 12.x.x使其工作,但是它并没有起作用。模拟器仍然连接着键盘。我想将其设置为断开连接以运行一些UITests。有任何想法吗? - Mikael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接