Touch ID API is not able to determine whether a device actually supports Touch ID if the user hasn't set up passcode

Number:rdar://20342024 Date Originated:30-Mar-2015
Status:Closed Resolved:8-Apr-2015
Product:iOS SDK Product Version:iOS8 and above
Classification:Enhancement Reproducible:Always
When a user hasn't set up passcode on their device, calling the CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out authError) from LAContext will throw out the PasscodeNotSet error as the authError, regardless of whether the device actually supports Touch ID or not. Therefore, it is not possible for developers to determine whether the user's device actually supports Touch ID.

If the device doesn't support Touch ID, the authError should always return 'TouchIDNotAvailable' regardless of whether the user has set up passcode or not. This way, developers can determine whether the device actually supports Touch ID or not.


Turns out that someone has reported a similar issue already (#18364575). Here is Apple's reply regarding the issue:

"Engineering has determined that this issue behaves as intended based on the following information:

If passcode is not set, you will not be able to detect Touch ID presence. Once the passcode is set, canEvaluatePolicy will eventually return LAErrorTouchIDNotAvailable or LAErrorTouchIdNotEnrolled and you will be able to detect Touch ID presence/state.

If users have disabled passcode on phone with Touch ID, they knew that they will not be able to use Touch ID, so the apps don't need to detect Touch ID presence or promote Touch ID based features. "

So..... the final answer from Apple is No. :(


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!