2017-10-03 11 views
9

enter image description hereLABiometryType in iOS11 immer None zurück

Egal, welche Einstellungen in Passcode des Geräts konfiguriert und touchId Einstellungen, LAContext immer keine zurückgibt. Es ist nur eine Warnung, nicht die Ausnahme.

Sein nur in iOS11.1 Beta in XCode 9.1 Beta arbeiten wie vorgeschlagen :(

+0

yeas beide in iPhone 7 Plus mit iOS 11 und iPad Pro 12,9 Zoll, aber mit Konsolenprotokoll als "[LAClient] initWithExistingContext -> (null), Fehlerdomäne = NSCOAErrorDomain Code = 4099" Die Verbindung zu servi ce namens com.apple.CoreAuthentication.daemon wurde von diesem Prozess ungültig gemacht. " UserInfo = {NSDebugDescription = Die Verbindung zum Dienst namens com.apple.CoreAuthentication.daemon wurde von diesem Prozess ungültig gemacht.} " – guhan0

+0

Mögliches Duplikat von [TouchID Absturz auf einigen iPhone 5S-Geräten] (https://stackoverflow.com/questions/27522482/touchid-crash-on-some-iphone-5s-devices) – the4kman

+0

canEvaluatePolicy return Wahr in iOS11 korrekt wie erwartet und evaluatePolicy funktioniert gut Aufforderung touchId von Benutzer.Ich erhalte die Warnung nicht die Ausnahme NSCoaErrorDomain – guhan0

Antwort

9

ich fand heraus, nur das Problem Sie haben canEvaluatePolicy für biometryType anrufen richtig eingestellt werden

Beispiel:.

func isFaceIdSupported() -> Bool { 
    if #available(iOS 11.0, *){ 
     if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) { 
      return context.biometryType == LABiometryType.typeFaceID 
     } 
    } 

    return false 
} 

Gemäß der Apple docs für biometryType:

„Diese Eigenschaft wird nur gesetzt, wenn canEvaluatePolicy (_: Fehler :) erfolgreich für eine biometrische Politik. Der Standardwert ist none. "

3

das gleiche Problem Got hier, es mit dem folgenden Code festgelegt. Aber es funktioniert nur mit dem Xcode 9.1 Beta (und iOS 11.1 . beta im Simulator)

if (laContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: nil)) { 

      if #available(iOS 11.0, *) { 
       if (laContext.biometryType == LABiometryType.typeFaceID) { 
        print("FaceId support") 
       } else if (laContext.biometryType == LABiometryType.typeTouchID) { 
        print("TouchId support") 
       } else { 
        print("No Biometric support") 
       } 
      } else { 
       // Fallback on earlier versions 
      } 
+0

Es ist nicht fair Apple soll den XCode9.1 vor dem iPhone X veröffentlichen. – guhan0

2

Wenn Sie den Code von @Ermish verwenden, gibt isFaceIdSupported() false zurück, wenn keine registrierten Gesichter auf dem Gerät vorhanden sind. Wie meine neuesten Tests auf iOS SDK 11.1 zeigen, rufen Sie einfach an die laContext.canEvaluatePolicy Funktion und kümmern sich nicht um das Ergebnis, dann den Inhalt von laContext.biometryType überprüfen.

Wenn es keine immatrikulierte Gesichter sind, wird die canEvaluatePolicy scheitern, aber das Gerät unterstützt Face ID.

Verwandte Themen