приложение (_ application: UIApplication, didFinishLaunchingWithOptions) не вызывается при запуске - PullRequest
0 голосов
/ 29 февраля 2020

Когда я убиваю приложение, проводя в многопользовательском интерфейсе в симуляторе и перезапуская его, метод application (didFinishLaunchingWithOptions) не вызывается, и каждый раз появляется только экран входа в систему. Я не понимаю, что происходит, и это действительно побеждает цель проверки, вошел ли пользователь в систему firebase или нет, если метод даже не вызывается при повторном запуске приложения, был бы очень признателен за помощь! (Это как-то связано с методами SceneDelegate, которые я вижу, из того, что я понимаю, метод didFinishLaunching должен вызываться независимо от запуска приложения)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        print("---------appDelegate didFinishLaunchingWithOptions called!---------------")
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = MainViewController()
        FirebaseApp.configure()
        return true
    } 

Вот код для MainViewController согласно запросу

import UIKit
import Firebase

class MainViewController: UIViewController {

    var handle: AuthStateDidChangeListenerHandle?

    override func viewDidLoad() {
        super.viewDidLoad()
        DispatchQueue.main.async {
            self.handle = Auth.auth().addStateDidChangeListener { (auth, user) in
                if user == nil {
                    print("nil user -----------")
                    self.perform(#selector(self.showHomeController), with: nil, afterDelay: 3)
              } else {
                    print("non nil user --------")
                    self.perform(#selector(self.showWelcomeController), with: nil, afterDelay: 3)
              }
            }
        }
    }

    @objc func showWelcomeController () {
        present(WelcomeViewController(), animated: true, completion: nil)
    }

    @objc func showHomeController () {
        present(HomeViewController(), animated: true, completion: nil)
    }
}

--------- appDelegate didFinishLaunchingWithOptions вызван! --------------- печатается только один раз, когда проект создается и открывается в симуляторе

Отказ от ответственности: я очень новичок в iOS разработке приложений.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Проблема в том, как вы «перезапускаетесь в симе». Если вы убьете приложение, а затем коснитесь значка приложения в симуляторе, вы больше не будете работать в Xcode; Вы работаете независимо. Таким образом, вы не получаете никакой отладки; сообщения print не появляются в консоли XCode, вы не останавливаетесь на точках останова и т. д. c.

Решение заключается в следующем: перезапустите, сообщив Xcode о необходимости сборки и запуска, а не нажав значок приложения в симуляторе.

0 голосов
/ 02 марта 2020

Действие по смахиванию и уничтожению приложения разрывает ссылку отладчика. Поэтому, если вы перезапустите приложение, щелкнув само приложение в симуляторе, у вас больше не будет ссылки на отладчик с Xcode. Вот почему вы больше не видите, как печатаются сообщения.

Вам нужно перезапустить из Xcode, чтобы снова распечатать сообщения запуска.

Если у вас есть другие вопросы, пожалуйста, напишите их отдельно. Это будет легче отслеживать и отвечать всем.

...