Xcode не вызывает делегат приложения после отказа от SceneDelegate - PullRequest
3 голосов
/ 11 декабря 2019

Когда вышла iOS 13, я отказался от использования нового SceneDelegate с помощью обычных процедур.

 - SceneDelegate.swift does no longer exist
 - There are no Scene related methods in AppDelegate
 - Application Scene Manifest is removed from .plist

Это прекрасно работало, и с тех пор я работаю (цель iOS 11.0, Xcode 11.2).1).

На прошлой неделе я запустил сборку с целевым значением развертывания 13.0, а затем переключился обратно на 11.0.

С тех пор методы делегирования приложения больше не вызываются, например.

func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any])

Единственное, что я вижу, это вход в консоль

Can't end BackgroundTask: no background task exists with identifier 15 (0xf), or it may have already been ended

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

Единственное, что может отличаться, это то, что раскадровки теперь по умолчанию работают в «автоматическом» (iOS 13.0, *) режиме презентации, но я не уверен, как это было раньше.

Поскольку автоматическое доступно только в iOS 13+, похоже, что-то не так.

У кого-нибудь есть подсказка?

Отслеживание ответа в этом нить :

applicationDidBecomeActive
applicationWillEnterForeground

и т. Д. На самом делеalled.

Я пытался очистить сборку, перезапустить Xcode, mac, устройство, очистить производные данные и т. д.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2019

Если вам не нужно использовать SceneDelegate, добавьте нижеприведенное свойство в файл AppDelegate.

var window: UIWindow?

Добавьте эту строку над функцией didFinishLaunchingWithOptions

var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
    {
     // Override point for customization after application launch.
            return true
    }
0 голосов
/ 19 декабря 2019

Итак, я наконец-то нашел ответ.

Оказалось, что старый добрый

метод экземпляра почти соответствует

func application(_ application: UIApplication, continue userActivity: NSUserActivity,
    restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool

, который Xcode полностью игнорировал, чтобы сообщить, икаким-то образом удалось прорваться между сборками для iOS 11> iOS 13> iOS 11.

Это также странно, потому что я проверил их пару дней назад с документацией, как Apple, так и Firebase, и не было никакой разницы междуих.

В конце концов, это работает сейчас, уау.

...