При использовании SwiftUI с iOS 13+, традиционные средства определения фонового состояния больше не работают. Например:
Методы AppDelegate
applicationDidEnterBackground(_ application: UIApplication)
иapplicationDidBecomeActive(_ application: UIApplication)
не вызываются.Уведомления
didEnterBackgroundNotification
,willEnterForegroundNotification
,didBecomeActiveNotification
иwillResignActiveNotification
не отправляются.
В качестве альтернативы есть UIWindowSceneDelegate
обратные вызовы: sceneDidBecomeActive(_ scene: UIScene)
, sceneWillResignActive(_ scene: UIScene)
, sceneWillEnterForeground(_ scene: UIScene)
, sceneDidEnterBackground(_ scene: UIScene)
Проблема с этими заменами заключается в том, что они относятся к одной из нескольких сцен, которые входят и выходят на передний план. Они не обеспечивают простой и понятный способ определить, находится ли все приложение на переднем плане или в фоновом режиме.
Определение статуса переднего и заднего плана приложения важно по причинам, не имеющим ничего общего с пользовательским интерфейсом. Некоторые функции iOS не работают без предупреждения, когда приложение не находится на переднем плане (два примера - сканирование по Bluetooth с подстановочными знаками и передача через iBeacon. .) Я часто разрабатываю фреймворки iOS, у которых вообще нет пользовательского интерфейса, поэтому мне нужен способ определения фона / состояния переднего плана приложения, который не зависит от вставки набора шаблонного кода в UIWindowSceneDelegate
- он Для меня неразумно просить кого-нибудь, кто использует мою структуру, сделать это.
Есть ли какие-либо простые способы определить статус переднего плана / фона приложений в iOS 13 с помощью SwiftUI?
NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main) { _ in
у вас не работает? - person pawello2222   schedule 09.09.2020