如何从命令行在Simulator中注册Touch ID?

时间:2016-10-18 20:54:30

标签: ios xcode cucumber frank

我想从命令行在iOS模拟器中注册Touch ID,这样我就可以围绕授权运行一些自动UI功能测试。

我尝试过一些不起作用的事情:

  • xcrun simctl没有Touch ID选项
  • 用于控制菜单的AppleScript无效,因为osascript没有辅助功能权限(我不喜欢this invasive workaround
  • 我尝试在启动之前编辑模拟器的plist,但找不到合适的键值对

如果重要的话,我正在使用Frank和Cucumber进行测试。

3 个答案:

答案 0 :(得分:2)

更新2019年5月:阅读接受的答案,了解相关方法。

2016年的原始答案:据我所知,无法在模拟器上激活此功能。

通常,为了测试这样的东西,我假装从Apple组件回调,或者如果没有预期的回调就弹出警报视图(比如在调用openURL:时,我会弹出警报视图在测试时使用应该打开的URL来验证在打开该URL时是否会打开正确的内容。

感觉有点像hacky,但它至少告诉我,如果Apple组件给我预期的回调,我的应用程序将采取预期的行动。

您如何判断它是否正在测试?好吧,你有几个选择。

Jon Reid有一篇关于如何判断你是否在运行时进行测试的好文章:http://qualitycoding.org/app-delegate-for-tests/ - 尽管他正在使用它来切换应用代表,我和#39; ve使用了类似的技术来检查应用程序目前是否正在测试中。

我不能100%确定这种技术适用于Cucumber和Frank,因为我不知道它们是否与测试在同一过程中运行。对于没有在与测试相同的过程中运行的事物(例如XCUI测试),我在启动应用程序时传递了ProcessInfo个参数,以便它知道要查找的内容。痛苦的屁股,再次,hacky,但它似乎确实有效。

答案 1 :(得分:2)

xcrun simctl spawn 'iPhone X' notifyutil -s com.apple.BiometricKit.enrollmentChanged '1' && xcrun simctl spawn 'iPhone X' notifyutil -p com.apple.BiometricKit.enrollmentChanged

这将注册指纹。来自here

的代码

编辑: 您可以将其用于手指触摸:

xcrun simctl spawn 'iPhone X' notifyutil -p com.apple.BiometricKit_Sim.fingerTouch.match
xcrun simctl spawn 'iPhone X' notifyutil -p com.apple.BiometricKit_Sim.fingerTouch.nomatch

答案 2 :(得分:0)

有一种方法可以从命令行执行(不涉及可访问性),但是它也具有侵入性(并且不是很容易)。 您可以以类似于Facebook的FBSimulatorControl项目(但不支持touchID注册功能)的方式使用Apple的CoreSimulator框架。

您可以在此处查看示例Swift脚本:

https://github.com/flockoffiles/SimTestCtl/blob/master/SimTestCtl/main.swift

使用它,您可以注册或取消注册已经启动的iOS模拟器(具有给定的UUID)。