Can we test Face ID in simulator?
Asked Answered
L

5

62

Can we test biometric authentication using the simulator?

The iPhone X Simulator shows a menu for Face ID enrollment, but after enabling that, what can I do?

How it will recognize a face for authentication?

iPhone X Simulator - Face ID settings

Lundt answered 7/11, 2017 at 13:21 Comment(1)
In later versions you find "Face ID" here : Simulator > Features > Face IDCorettacorette
M
58

Simulator does not recognise a face but allows you to simulate a matching and non-matching faces, if you've enabled Enrolled option from Face ID.


Add following code to your view controller and try with 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 authentication will prompt you for first time to allow FaceID detection for your app.

enter image description here


Now enable Face ID enrolment and run your app to test Face ID simulation Testing.

Here is simulation result for matching and non-matching faces.

Result for matching face:

enter image description here


Result for non-matching face:

enter image description here


Muraida answered 7/11, 2017 at 14:31 Comment(2)
Can one somehow customize that square Face ID prompt? I'd like to add some text there. Is it possible?Hygeia
@AndreySolovyov It's not customizable.Azotize
L
9

The simulator just simulates the outcome of a correct and a failed face recognition, just like it does with Touch ID. It does not recognize faces.

Lilian answered 7/11, 2017 at 13:27 Comment(1)
Thanks, got your point. I am working with biometric first time. So we have to press match face during authentication to authenticate successfully.Lundt
D
1

See this article. You can create the Biometrics.m, Biometrics.h, and bridging-header.h files within you UITests folder and update your UI test target to use that bridging header. https://github.com/KaneCheshire/BiometricAutomationDemo

Duple answered 4/9, 2020 at 21:40 Comment(0)
H
0

As you asking - but after enabling that, what can I do?

Just like a touch Id enrolment, You can verify things with face-Id on iPhone-X. However simulator have some limitations like Appstore etc. With face-Id enrolment you can do following things -

  • Use Face ID to make purchases.
  • Sign in with Face ID (Sign in to apps).
  • Autofill passwords in Safari.
  • In the iTunes Store, App Store, and iBooks Store.

See more at Apple

Homely answered 7/11, 2017 at 13:41 Comment(1)
Thanks for your input, I will surely check links for more details.Lundt
M
0

same as give by @krunal just 2nd if should be outside of 1st.

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)) {



        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")
                    }
                }
            })
        })
    }
//This should be outside of if

 if let laError = error {
        print("laError - \(laError)")
        return
     }
 }
}
Madai answered 30/1, 2018 at 5:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.