2017-09-13 5 views
5

Ich habe den neuesten Xcode 9 GM (13 Sep. 2017) ausgeführt und Hardware > Face ID > Enrolled im Simulator sowie Deployment Target 11.0 eingestellt. Ich bekomme jedoch den Fehlercode -6 LAErrorTouchIDNotAvailable.iOS 11 Simulator LAContext und FaceID nicht zulassen

Gibt es eine Einstellung, die ich vermisse?

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") 
} 
+0

Verwendung dieser Bibliothek unterstützt FaceID und touchid sowohl . https://github.com/tejas-ardeshna/TJBioAuthentication –

Antwort

8

Face-ID funktioniert nicht in der Xcode 9 GM aufgrund eines Framework-Bugs. Xcode 9.1 behebt dieses Problem.

Sie können Ihre App im iPhone 8-Simulator testen und sicherstellen, dass sie mit Touch ID funktioniert, oder die Xcode 9.1 Beta ausführen und die Face ID-Unterstützung dort testen.

1

XCode 9.1 Beta kam heute heraus, in dem der ursprüngliche Code sollte perfekt im Simulator funktionieren!

1

Laut Apples Dokumentation für LAContext müssen wir den Schlüssel NSFaceIDUsageDescription mit einem Verwendungszweck String hinzufügen, da die Autorisierungsanforderung für die Verwendung von FaceId auf dem Gerät angezeigt wird.

Beispiel fügen Sie diese info.plist:

NSFaceIDUsageDescription 

setzen es String eingeben, und fügen Sie einen Text, den Sie möchten für den Zugriff auf die Face ID Kamera in der Eingabeaufforderung Anfrage gezeigt, werden.

"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. 

Durch das Hinzufügen dieser können Sie an den Simulator für iPhone X gehen, und Sie werden für die Face ID aufgefordert werden, drücken Sie akzeptieren, und alles sollte perfekt funktionieren.

Denken Sie daran, Biometrie Unterstützung für den Simulator, indem Sie in Simulator -> Hardware -> Face ID/Touch ID -> Enrolled

Dann brauchen Sie nur auf die Match/Non-Matching Touch/Face ID gedrückt wird, zu testen, Ihre Handhabung

Für weitere Details und sehen Sie sich Apples Dokumentation einschreiben: https://developer.apple.com/documentation/localauthentication/lacontext

---- ---- bearbeiten

Das ist für mich arbeiteten beide in Xcode 9.0 und 9.1

2

Face ID funktioniert jetzt, mit Xcode 9.1. Befolgen Sie diese Schritte, um es im Simulator zu testen.

Fügen Sie eine Datenschutzerklärung in die Datei info.plist Ihres Ziels ein.

enter image description here

Import LocalAuthentication Rahmen zu Ihrem Projekt und fügen Sie Ihre View-Controller folgenden Code und versuchen, mit FaceID

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 Authentifizierung wird Sie auffordern, für die erste Zeit FaceID zu ermöglichen Erkennung für Ihre App.

enter image description here


Jetzt Face ID Einschreibung ermöglichen und führen Sie Ihre Anwendung Face ID Simulation Testing zu testen.

enter image description here

Hier Simulationsergebnis für den Abgleich und die nicht passenden Flächen.

Ergebnis zum Abgleichen Gesicht:

enter image description here


Ergebnis für die nicht passendes Gesicht:

enter image description here

+1

Es funktioniert völlig in Ordnung –