Swift 应用程序在关闭时出现奇怪的行为
Swift application having weird behavior when closing it
我正在开发一个在开头使用 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 警报之前向上移动徽标的动画),崩溃会完全停止。
所以我做了另一个延迟测试:
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 秒,都对我有用。
我正在开发一个在开头使用 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 警报之前向上移动徽标的动画),崩溃会完全停止。
所以我做了另一个延迟测试:
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 秒,都对我有用。