是否可以在模拟器中使用 xcuitest 自动化触摸 ID 或面部 ID?

Is it possible to automate touch ID or face ID using xcuitest in simulator?

有没有办法在模拟器中使用 xcuitest 框架自动执行面部 ID 或触摸 ID。我可以手动执行注册 face/touch id 并执行匹配或非匹配场景。但是我想知道它是否可以自动化?

鉴于 Kane Cheshire this post,可以通过像这样发送 Darwin 通知来自动执行触摸 ID 和面容 ID 以进行单元测试:

+ (void)enrolled {
  int token;
  notify_register_check("com.apple.BiometricKit.enrollmentChanged", &token);
  notify_set_state(token, 1);
  notify_post("com.apple.BiometricKit.enrollmentChanged");
}

虽然仅在 Objective-C 中,因此您可能需要使用桥接头。

在 Gitub 上导入文件 Biometrics.m and Biometrics.h from his demo,您将能够从您的 XCTestCase.

调用 Biometrics.enrolled()

或者,如果 Touch/FaceId 阻止了您的 XCUITesting,我建议您进行如下所示的简单检查以禁用 Touch/faceId

guard CommandLine.isRunningUITests else {
    return true
}
extension CommandLine {
    static var isRunningUITests:Bool {
        return CommandLine.arguments.contains("--uitesting")
    }
}

你可以像下面这样轻松通过LaunchArguments

XCUIApplication().launchArguments.append("--uitesting")