【问题标题】:Swift application having weird behavior when closing itSwift 应用程序在关闭时有奇怪的行为
【发布时间】:2020-04-15 18:20:16
【问题描述】:

我正在开发一个在开头使用 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.}

【问题讨论】:

  • 你能描述一下奇怪的部分是什么——我没看到。
  • @LouFranco 最后,当我关闭应用程序时,手机崩溃并进入主屏幕
  • 您有可以分享的崩溃日志吗?
  • 我面临同样的问题!在我的情况下,重播关闭被调用了 2 次,其中一个处于正常流程中。强制退出后的第二次。我想知道这是为什么??
  • AppDelegateapplicationDidResignActiveapplicationDidEnterBackground有code吗?

标签: ios swift touch-id face-id


【解决方案1】:

我相信我已经找到了解决问题的方法,即延迟评估。

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

所以我做了另一个延迟测试:

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 秒,都对我有用。

【讨论】:

  • 此解决方案是否有最小延迟?
  • 您的答案有效,但实际上似乎是“绕过”而不是正确的解决方案。仍标记为解决方案
  • 我怀疑当有错误时,在控制器完成渲染之前调用评估时(在 viewDidAppear 之后)
猜你喜欢
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2015-05-15
相关资源
最近更新 更多