[LAContext biometryType]:iOS 11.0.0上无法识别的选择器

[LAContext biometryType]:iOS 11.0.0上无法识别的选择器,ios,swift,Ios,Swift,我在织物上看到几十起碰撞 Fatal Exception: NSInvalidArgumentException -[LAContext biometryType]: unrecognized selector sent to instance 0x1c066aa00 这很奇怪,因为我只在iOS 11+上调用LAContext上的biometryType 守则: private static var biometryType: BiometryType? { let c

我在织物上看到几十起碰撞

Fatal Exception: NSInvalidArgumentException
-[LAContext biometryType]: unrecognized selector sent to instance 0x1c066aa00
这很奇怪,因为我只在iOS 11+上调用LAContext上的biometryType

守则:

    private static var biometryType: BiometryType? {
        let context = LAContext()

        guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil),
            context.evaluatedPolicyDomainState == BiometryManager.savedPolicyDomainState else { return nil }

        if #available(iOS 11.0, *) {
            switch context.biometryType {
            case .typeFaceID: return .typeFaceID
            case .typeTouchID: return .typeTouchID
            case .none: return nil
            }
        }
        return .typeTouchID
    }

有什么建议吗

我唯一的线索是所有的崩溃都与11.0.0有关。所以,也许苹果不是在11.0.0中添加了biometryType,而是晚了一点

链接:


这不是一个很好的解决方案,但这似乎是iOS 11.0中的一个bug


我已经看到多个关于此崩溃的报告,当用户升级到更新版本的iOS时,所有报告都已得到解决。

正如@stonesam92所说,这可能是iOS 11.0.0中的一个bug。下面的代码保护我免于崩溃

if #available(iOS 11.0, *), authenticationContext.responds(to: #selector(getter: LAContext.biometryType))
这同样有效:

if #available(iOS 11.0.1, *) {...}
iPhoneX的第一个版本是11.0.1


从崩溃报告来看,这绝对有效。

此代码适用于Objective-C(在iOS 11.0及以下版本上)


@Sonu VR的积分

哪些设备会导致此崩溃?你有没有验证过它的设备能够识别生物特征数据?我想知道守卫声明是否不起作用,因为它应该在除iPhoneX以外的所有设备上崩溃,但主要是iPhone7。好吧,显然你对守卫声明的看法是正确的。当你测试iPhone 7时,它能正常工作吗?@Lefteris是的,它在我的iPhone 7上甚至在iPhone X上都能正常工作。是否有可能发生了错误,但你没有看到它,因为你在
LAContext.canEvaluatePolicy中传递了
nil
的错误参数。我确实向苹果提交了一份错误报告。等待他们的回复:P您是否可以从Xcode 9.0在iOS 11.0模拟器中重现该问题?或者仅在运行iOS 11.0的设备上?@AdamJohns当尝试从Xcode组件下载“iOS 11.0模拟器”时,它将实际安装解决此问题的iOS 11.0.1。
if (@available(iOS 11.0, *) && [context    respondsToSelector:@selector(biometryType)])
            {}