我如何从命令行在模拟器中注册触摸ID



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

我已经尝试了一些不工作的事情:

  • xcrun simctl没有Touch ID选项
  • 一个AppleScript来控制菜单没有工作,因为osascript没有访问权限(我不喜欢这种侵入性的解决方案)
  • 我试着在启动前编辑模拟器的列表,但找不到合适的键值对

如果有关系的话,我要用Frank和Cucumber来做测试。

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

这将注册指纹。代码摘自这里

编辑:你可以用它来进行手指触摸:

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

2019年5月更新:阅读接受的答案,这是这样做的

2016年的原始答案:据我所知,没有办法在模拟器上激活它。

一般来说,要测试这样的东西,我从Apple组件中获取回调,或者弹出一个警告视图,如果没有预期的回调(就像调用openURL:时,我将弹出一个应该打开的URL的警告视图,以验证打开URL时打开的是正确的东西)。

感觉有点粗糙,但它至少告诉我,如果Apple组件给我预期的回调,我的应用程序将采取预期的操作。

你怎么知道它是否在测试?你有几个选择。

Jon Reid有一个关于如何判断你是否在运行时测试的好帖子:http://qualitycoding.org/app-delegate-for-tests/-尽管他使用它来切换应用程序委托,我已经使用了类似的技术来检查应用程序目前是否在测试中。

我不能100%肯定这个技术会对Cucumber和Frank起作用,因为我不知道它们是否在与测试相同的过程中运行。对于没有在与测试(如XCUI测试)相同的过程中运行的东西,当应用程序启动时,我已经通过了ProcessInfo参数,以便它知道要查找什么。虽然很烦人,但似乎确实有效。

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

你可以在这里看到一个Swift脚本示例:

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

有了它,你可以注册或取消注册一个已经启动的iOS模拟器(与给定的UUID)。

最新更新