TwitterKit 登录 WebView 在 iOS 13 中未关闭

TwitterKit Login WebView not dismissing in iOS 13

我正在尝试在我正在使用 TwitterKit 开发的新应用程序中实现 Twitter 登录。 iOS 11 和 iOS 12 一切正常,但 iOS 13 似乎有问题。

这是我在 LoginViewController 中的代码

override func viewDidLoad() {
    super.viewDidLoad()

    let logInButton = TWTRLogInButton(logInCompletion: { session, error in
        if session != nil {
            UserDefaults.standard.set(session?.userID, forKey: "userId")
            UserDefaults.standard.set(session?.userName, forKey: "userName")
            UserDefaults.standard.set(true, forKey: "isLoggedIn")

            print("***** complete with login")
            self.performSegue(withIdentifier: "toHome", sender: self)

        } else {
            print("TWTRButton Error:")
            print(error.debugDescription)
        }
    })
    logInButton.center = self.view.center
    self.view.addSubview(logInButton)
}

登录后,登录的webview本应关闭,但它只是在当前屏幕旋转,并没有关闭。事实上,它自己的 loginCompletion 永远不会触发,因为两个打印语句都不会触发。

我认为这与模态呈现有关。不管怎样?

所以问题出在 Xcode 11 本身的更改上。我使用了一个名为 TwitterKit5 的 TwitterKit 维护版本,并在 GitHub 上发布了一个问题。

https://github.com/touren/twitter-kit-ios/issues/10#issuecomment-582262246

维护者指出,新的 Xcode 创建了一个新的 SceneDelegate 文件,它阻塞了

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool

将此添加到 SceneDelegate.swift:

func scene(_ scene: UIScene,
           openURLContexts URLContexts: Set<UIOpenURLContext>) {
    if let context = URLContexts.first {
        TWTRTwitter.sharedInstance().application(UIApplication.shared, open: context.url, options: [UIApplication.OpenURLOptionsKey.sourceApplication: context.options.sourceApplication as Any])
    }
}

之后工作完美!