ios - Swift 应用程序在关闭时有奇怪的行为

标签 ios swift touch-id face-id

我正在开发一个在开头使用 Face/Touch ID 的应用程序。 我通过将此函数添加到我的 MainViewController() 中来实现此目的:

let context = LAContext()

    if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: nil) {
        context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Verifying") { (success, err) in
            if success {
                DispatchQueue.main.async {
                    self.loginSuccessfull()
                    self.button.removeFromSuperview()
                }
            } else {
                if let err = err {
                    print(err)
                }
            }
        }
    }

这会在 ViewDidLoad 中和通过按钮调用,如 this video 所示。 .

正如你所看到的,当我尝试关闭我的应用程序时,它有一个非常奇怪的行为,我确信这是由 FaceID 引起的。

有什么建议可以解决这个问题吗?

崩溃日志:

Error Domain=com.apple.LocalAuthentication Code=-4 "Caller moved to background." UserInfo={NSLocalizedDescription=Caller moved to background.}

最佳答案

我相信我已经通过延迟评估找到了该问题的解决方案。

我注意到,当我在评估之前在 UI 中出现任何类型的延迟时(例如:在显示面容 ID 警报之前向上移动 Logo 的动画),崩溃会完全停止。

所以我做了另一个延迟测试,如下所示:

override func viewDidAppear(_ animated: Bool) {
    let context = LAContext()
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Biometric test") { success, error in
                DispatchQueue.main.async {
                    if success {
                        doSome()
                    } else {
                        if let error = error { print(error) }
                    }
                }
            }
        }
    }
}

通过该实现,我的崩溃为零。

*注意:我还尝试了不同的延迟时间,从 0.1 到 2.0 秒,都对我有用。

关于ios - Swift 应用程序在关闭时有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59472629/

相关文章:

swift - 为什么 Swift 不自动处理内存泄漏?

ios - 取消 Objective C 中的 LAContext 评估

ios - 隐藏 SecItemUpdate 上的 TouchId 弹出窗口

ios - 如何在 XCode 9 的核心数据模型编辑器中完全删除实体描述?

ios - 适用于 iOS 的 Xamarin 表单和 Firebase AdMob

ios - Apple 开源和 Cocoa Touch 类(class)?

ios - 查看 iPhone 5s 上是否启用了 Touch ID

android - 通过iOS或Android上的“添加到主屏幕”添加的Web应用程序的命名约定?

ios - 方向动画不显示方向何时改变 ios Swift

swift - 音频未在 SwiftUI 中播放