2017-09-13 18 views
5

Mam uruchomiony najnowszy Xcode 9 GM (13 września 2017 r.) I ustawiłem Hardware > Face ID > Enrolled w symulatorze, a także Deployment Target 11.0. Jednak otrzymuję kod błędu -6 LAErrorTouchIDNotAvailable.Symulator iOS 11 nie dopuszczający LAContekstu i FaceID

Czy jest jakieś ustawienie, którego mi brakuje?

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

użycie tej biblioteki, obsługuje faceid i touchid zarówno . https://github.com/tejas-ardeshna/TJBioAuthentication –

Odpowiedz

8

Identyfikator twarzy nie działa w Xcode 9 GM z powodu błędu w strukturze. Xcode 9.1 rozwiązuje ten problem.

Możesz przetestować swoją aplikację w symulatorze iPhone'a 8 i upewnić się, że działa poprawnie z Touch ID lub uruchomić test beta Xcode 9.1 i przetestować tam obsługę Face ID.

1

Dzisiaj pojawił się beta XCode 9.1, w którym oryginalny kod powinien działać idealnie w symulatorze!

1

Zgodnie z Dokumentacją Jabłek dla LAContext, musimy dodać klucz NSFaceIDUsageDescription z powodu użycia String, ponieważ spowoduje to wyświetlenie żądania autoryzacji użycia FaceID na urządzeniu.

Przykład dodać do Info.plist:

NSFaceIDUsageDescription 

ustawić go typu String i dodać tekst, który ma być pokazany w szybkim wniosek o dostęp do kamery ID twarzy.

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

Dodając to, można przejść do symulatora dla iPhone X, a użytkownik zostanie poproszony na twarz ID naciśnij przyjąć, i wszystko powinno działać idealnie.

Pamiętaj, aby zapisać wsparcia biometria na symulatorze przez wchodząc Simulator -> Hardware -> Face ID/Touch ID -> Enrolled

Potem wystarczy nacisnął Match/Non-Matching Touch/Face ID, aby przetestować swoją manipulację

Aby uzyskać więcej informacji i sprawdzić dokumentację Apple: https://developer.apple.com/documentation/localauthentication/lacontext

---- Edit ----

ten pracował dla mnie zarówno w Xcode 9.0 i 9.1

2

Identyfikator twarzy działa teraz, z Xcode 9.1. Wykonaj poniższe kroki, aby przetestować go w Symulatorze.

Dodaj oświadczenie o ochronie prywatności w pliku info.plist celu.

enter image description here

importu LocalAuthentication ramy projektu i dodaj następujący kod do kontrolera widoku i spróbuj 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") 
         } 
        } 

       }) 
      }) 
     } 


    } 
} 


uwierzytelniania FaceID poprosi po raz pierwszy, aby umożliwić FaceID wykrywanie Twojej aplikacji.

enter image description here


Teraz umożliwić ID rejestrowania twarzy i uruchomić aplikację, aby badanie ID twarzy Badanie symulacyjne.

enter image description here

Oto wynik symulacji dla dopasowania i niedopasowanych twarze.

Wynik dla dopasowywania twarzy:

enter image description here


Wynik dla niedopasowanych twarzy:

enter image description here

+1

Działa idealnie dobrze –

Powiązane problemy