我想从命令行在iOS模拟器中注册Touch ID,这样我就可以围绕授权运行一些自动UI功能测试。
我尝试过一些不起作用的事情:
xcrun simctl
没有Touch ID选项osascript
没有辅助功能权限(我不喜欢this invasive workaround)如果重要的话,我正在使用Frank和Cucumber进行测试。
答案 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)。