Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从命令行在模拟器中注册触摸ID?_Ios_Xcode_Cucumber_Frank - Fatal编程技术网

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

Ios 如何从命令行在模拟器中注册触摸ID?,ios,xcode,cucumber,frank,Ios,Xcode,Cucumber,Frank,我想从命令行在iOS模拟器中注册Touch ID,以便围绕授权运行一些自动化的UI功能测试 我尝试了一些无效的方法: xcrun simctl没有触摸ID选项 控制菜单的AppleScript不起作用,因为osascript没有访问权限(我不喜欢) 我试着在启动前编辑模拟器的plist,但找不到合适的键值对 如果有必要的话,我将使用Frank和Cucumber进行测试。2019年5月更新:阅读已接受的答案,这就是方法。 2016年的原始答案:据我所知,没有办法在模拟器上激活它 一般来说,为了

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

我尝试了一些无效的方法:

  • xcrun simctl
    没有触摸ID选项
  • 控制菜单的AppleScript不起作用,因为
    osascript
    没有访问权限(我不喜欢)
  • 我试着在启动前编辑模拟器的plist,但找不到合适的键值对

如果有必要的话,我将使用Frank和Cucumber进行测试。

2019年5月更新:阅读已接受的答案,这就是方法。

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

一般来说,为了测试类似的东西,我会伪造苹果组件的回调,或者在测试时弹出一个警报视图,如果没有预期的回调(比如调用
openURL:
,我会弹出一个警报视图,其中包含应该打开的URL,以验证打开该URL时是否会打开正确的东西)

这感觉有点骇人,但它至少告诉我,如果苹果组件给我预期的回调,我的应用程序将采取预期的行动

你如何判断它是否正在测试?嗯,你有两个选择

Jon Reid在这里发布了一篇关于如何判断您是否正在运行时测试的帖子:-虽然他使用它来切换应用程序委托,但我使用了类似的技术来检查应用程序当前是否正在测试中


我不能100%确定Cucumber和Frank是否能使用这种技术,因为我不知道它们是否与测试运行在同一个过程中。对于与测试不在同一进程中运行的东西(例如XCUI测试),我在启动应用程序时传入了
ProcessInfo
参数,以便它知道要查找什么。屁股痛,还有,哈奇,但它似乎确实有效

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

您可以在此处看到一个示例Swift脚本:

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

这将注册指纹。代码取自

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

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

很确定计算机没有拇指,伙计。你仍然可以使用
osascript
来运行AppleScript,而不会受到恶意攻击。打开系统首选项,进入安全和隐私->隐私选项卡。现在,将终端(或运行脚本所用的任何应用程序)添加到“允许下面的应用程序控制您的计算机”下的应用程序列表中。@Artal如果您可以通过命令行(例如使用Ansible之类的工具)演示如何操作,这将是一个可接受的答案。@AaronBrager我认为通过命令行是不可能的,这就是为什么我没有添加它作为答案。虽然你只需要做一次,所以它不需要成为你自动化过程的一部分;您可以将其视为运行脚本的机器的先决条件。哇,谢谢!没想到这会得到回答。
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