Сбой приложения после реализации прослушивателя аутентификации Firebase в делегате сцены

Я реализовал Firebase Auth (вход в систему с Apple) и Firebase firestore в приложении в App Store. Я реализовал прослушиватель для состояния аутентификации в делегате сцены из документации firebase. https://firebase.google.com/docs/auth/ios/start

Он проверяет, вошел ли пользователь в систему или нет. Код предназначен для представления контроллера представления входа в систему, если пользователь не зарегистрирован, или контроллера основного представления, если пользователь уже создал учетную запись и не вышел из системы при запуске.

Тем не менее, я получил отзывы от пользователей, что после выхода и входа в систему приложение продолжает вылетать как в реальном времени, так и в testFlight, у меня ничего не сообщается в Crashlytics или App Store Connect. Я ищу помощи у людей, которые столкнулись с такими же проблемами.

 var handle: AuthStateDidChangeListenerHandle?

 handle = Auth.auth().addStateDidChangeListener { (auth, user) in
        if((user) != nil){
            let home = TabBar()
            home.selectedIndex = 1
            self.window?.rootViewController = home
        } else if((user) == nil) {
            print("Not Logged in")
            let signup = SignUpVC()
            self.window?.rootViewController = signup
        }
    }

person Sully07    schedule 06.05.2020    source источник
comment
Нам определенно нужна дополнительная информация. Можете ли вы воспроизвести ошибку с прикрепленным отладчиком? Даже в сборке Release могло быть достаточно.   -  person Tiziano Coroneo    schedule 06.05.2020
comment
Мне не удалось воспроизвести ошибку, я знаю только, что это, безусловно, связано с нехваткой памяти на устройстве, из-за которой ОС убивает приложение (приложение вылетает, загрузите iPhone и вернитесь на экран блокировки ). Эта проблема возникает, поскольку я добавил прослушиватель аутентификации и реализовал эту логику в своем приложении.   -  person Sully07    schedule 07.05.2020


Ответы (1)


Решено: сбой был вызван утечкой памяти из-за сильного ссылочного цикла. вот отличный учебник, чтобы понять это: https://www.youtube.com/watch?v=q0-DIJszYRo Чтобы этого избежать, я использовал weak & [weak self]

weak var handle: AuthStateDidChangeListenerHandle?

handle = Auth.auth().addStateDidChangeListener { [weak self] (auth, user) in

Это решает проблему, ОС больше не убивает приложение из-за нехватки памяти.

person Sully07    schedule 15.05.2020