Это общее предположение, потому что ваш код работает на меня.
Я думаю, что у вас два пользователя аутентифицированы одновременно. Это происходит с нами во время разработки, потому что приложение взломает sh и оставит пользователя аутентифицированным, а затем, когда мы сделаем изменение и повторно запустим, мы можем аутентифицировать другого пользователя et c et c.
Когда существует более одного пользователя с аутентификацией, вызов SyncUser.current вызовет sh.
Во-первых, я бы перевернул проверку ошибок таким образом, чтобы сначала перехватывать любые фатальные ошибки типа, возвращая, если это случается.
SyncUser.logIn(with: creds, server: Constants.AUTH_URL) { user, err in
if let err = err {
print(err.localizedDescription)
return
}
Попробуйте и посмотрите, выводит ли это какие-либо ошибки на консоль.
Я не знаю, откуда вызывается ваш код для входа, но вот что у нас на месте. Если приложение запускается, и с этого устройства выполняется авторизация нескольких пользователей, мы просто выходим из него и затем переходим к логину
override func viewDidAppear() {
super.viewDidAppear()
let count = SyncUser.all.count
if count > 1 {
for userDict in SyncUser.all {
let user = userDict.value as! SyncUser
user.logOut()
}
}
if let _ = SyncUser.current {
print("user already logged in")
self.finishLogin()
} else {
print("logging in a user")
self.handleLoginAction()
}
}
SyncUser.all словарь всех действующих, зарегистрированных в системе идентификаторов пользователей, соответствующих их объектам SyncUser.
Опять же, это общее предположение - пожалуйста, оставляйте комментарии, если появится какая-либо дополнительная информация, и я обновлю (или удалю) ответьте соответственно.