3

我面临一个问题CoreAuthentication

我已canEvaluatePolicy:error:按照文档要求致电,但结果始终是.none.

fileprivate let biometricsType: SecurityBiometrics = {
        var error: NSError?
        let evaluated = LAContext().canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
        if #available(iOS 11.0, *) {
            if LAContext().biometryType == .faceID { return .faceID }
            if LAContext().biometryType == .touchID { return .touchID }
        } else {
            if (evaluated || (error?.code != LAError.touchIDNotAvailable.rawValue)) {
                return .touchID
            }
        }
        return .none
    }()

// biometricsType returns `.none`

控制台上显示错误:

[LAClient] initWithExistingContext -> (null), Error Domain=NSCocoaErrorDomain Code=4099 “与名为 com.apple.CoreAuthentication.daemon 的服务的连接在此进程中无效。” UserInfo={NSDebugDescription=与名为 com.apple.CoreAuthentication.daemon 的服务的连接在此进程中无效。}

它以前已经工作过,但现在(没有任何更改)它仍在返回.none

你遇到过同样的错误吗?

4

1 回答 1

3

您没有分享完整的错误信息。这是完整的错误消息:

[LAClient] initWithExistingContext -> (null), Error Domain=NSCocoaErrorDomain Code=4099 “与名为 com.apple.CoreAuthentication.daemon 的服务的连接在此进程中无效。” UserInfo={NSDebugDescription=与名为 com.apple.CoreAuthentication.daemon 的服务的连接从此进程无效。} 2018-03-29 13:42:37.866753+0530 Test[1505:35036] [LAClient] initWithExistingContext -> (null ), Error Domain=NSCocoaErrorDomain Code=4099 “与名为 com.apple.CoreAuthentication.daemon 的服务的连接从此进程无效。” UserInfo={NSDebugDescription=与名为 com.apple.CoreAuthentication.daemon 的服务的连接在此进程中无效。}

在普通语言中,它表示您在代码块中LAContext()每次都初始化 ( ) 时遇到问题。[LAClient] initWithExistingContext -> (null)使用 LAContext 的单个实例。

试试这个,看看:

fileprivate let biometricsType: LABiometryType = {
    let laContext = LAContext()
    var error: NSError?
    let evaluated = laContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)

    if let laError = error {
        print("laError - \(laError)")
        return .none
    }

    if #available(iOS 11.0, *) {
        if laContext.biometryType == .faceID { return .faceID }
        if laContext.biometryType == .touchID { return .touchID }
    } else {
        if (evaluated || (error?.code != LAError.touchIDNotAvailable.rawValue)) {
            return .touchID
        }
    }
    return .none
}()

// print biometricsType
print("biometricsType - \(biometricsType.rawValue)")

结果:biometricsType - 2

看这个快照:

在此处输入图像描述

于 2018-03-29T08:20:07.567 回答