【问题标题】:iOS 11 Simulator not allowing LAContext and FaceIDiOS 11 模拟器不允许 LAContext 和 FaceID
【发布时间】:2017-09-13 03:10:29
【问题描述】:

我正在运行最新的 Xcode 9 GM(2017 年 9 月 13 日)并在模拟器中设置了 Hardware > Face ID > Enrolled 以及 Deployment Target 11.0。但是我收到错误代码 -6 LAErrorTouchIDNotAvailable

我缺少一些设置吗?

let myContext = LAContext()
let myLocalizedReasonString = "You are pretty"

var authError: NSError?
if #available(iOS 8.0, macOS 10.12.1, *) {
    if myContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) {
        myContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: myLocalizedReasonString) { success, evaluateError in
            if success {

                print("// User authenticated successfully, take appropriate action")
            } else {
                 print(" // User did not authenticate successfully, look at error and take appropriate action")
            }
        }
    } else {
         print(" // Could not evaluate policy; look at authError and present an appropriate message to user")
    }
} else {
     print(" // Fallback on earlier versions")
}

【问题讨论】:

标签: ios ios-simulator ios11 iphone-x face-id


【解决方案1】:

由于框架错误,Face ID 在 Xcode 9 GM 中不起作用。 Xcode 9.1 修复了这个问题。

您可以在 iPhone 8 模拟器中测试您的应用并确保它与 Touch ID 一起正常工作,或者运行 Xcode 9.1 测试版并在那里测试 Face ID 支持。

【讨论】:

    【解决方案2】:

    我认为 iphone X 模拟器的 faceID 目前无法使用,希望他们能尽快修复它...

    https://forums.developer.apple.com/thread/86779

    我们可以做一个错误报告,看看它是否能加快速度:P https://developer.apple.com/bug-reporting

    【讨论】:

      【解决方案3】:

      Face ID 现在可以在 Xcode 9.1 中使用。按照以下步骤在模拟器中对其进行测试。

      在目标的 info.plist 文件中添加隐私声明。

      LocalAuthentication 框架导入您的项目并将以下代码添加到您的视图控制器并尝试使用Face-ID

      import LocalAuthentication
      
      class ViewController: UIViewController {
      
      
          override func viewDidLoad() {
              super.viewDidLoad()
              localAuthentication()
          }
      
      
      
          func localAuthentication() -> Void {
      
              let laContext = LAContext()
              var error: NSError?
              let biometricsPolicy = LAPolicy.deviceOwnerAuthenticationWithBiometrics
      
              if (laContext.canEvaluatePolicy(biometricsPolicy, error: &error)) {
      
                  if let laError = error {
                      print("laError - \(laError)")
                      return
                  }
      
                  var localizedReason = "Unlock device"
                  if #available(iOS 11.0, *) {
                      if (laContext.biometryType == LABiometryType.faceID) {
                          localizedReason = "Unlock using Face ID"
                          print("FaceId support")
                      } else if (laContext.biometryType == LABiometryType.touchID) {
                          localizedReason = "Unlock using Touch ID"
                          print("TouchId support")
                      } else {
                          print("No Biometric support")
                      }
                  } else {
                      // Fallback on earlier versions
                  }
      
      
                  laContext.evaluatePolicy(biometricsPolicy, localizedReason: localizedReason, reply: { (isSuccess, error) in
      
                      DispatchQueue.main.async(execute: {
      
                          if let laError = error {
                              print("laError - \(laError)")
                          } else {
                              if isSuccess {
                                  print("sucess")
                              } else {
                                  print("failure")
                              }
                          }
      
                      })
                  })
              }
      
      
          }
      }
      


      FaceID 身份验证将首次提示您允许对您的应用进行 FaceID 检测。


      现在启用 Face ID 注册并运行您的应用来测试 Face ID 模拟测试。

      这是匹配和不匹配人脸的模拟结果。

      人脸匹配结果:


      人脸不匹配的结果:

      【讨论】:

        【解决方案4】:

        XCode 9.1 beta 今天发布,原始代码应该可以在模拟器中完美运行!

        【讨论】:

          【解决方案5】:

          根据 Apples Documentation for LAContext,我们需要添加密钥 NSFaceIDUsageDescription 以及使用原因字符串,因为这将显示设备上使用 FaceId 的授权请求。

          示例将其添加到 info.plist:

          NSFaceIDUsageDescription
          

          将其设置为 String 类型,并在访问 Face ID 摄像头的提示请求中添加您想要显示的文本。

          "Your app" request your permission to use Face ID, for you to login to your account / unlock your notes / what ever reason in the end.
          

          通过添加这个,你可以进入 iPhone X 模拟器,系统会提示你输入 Face ID,按接受,一切都应该可以正常工作了。

          记得为模拟器注册生物识别支持,方法是进入 Simulator -> Hardware -> Face ID / Touch ID -> Enrolled

          然后你只需要按下Match / Non-Matching Touch / Face ID,来测试你的处理方式

          欲了解更多详情并查看 Apple 文档:https://developer.apple.com/documentation/localauthentication/lacontext

          ---- 编辑----

          这在 Xcode 9.0 和 9.1 中都适用于我

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-20
            • 1970-01-01
            • 2021-02-06
            • 1970-01-01
            • 2016-03-06
            • 2022-12-22
            • 2018-01-04
            • 1970-01-01
            相关资源
            最近更新 更多