我想从命令行在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)。