-
-
Notifications
You must be signed in to change notification settings - Fork 669
Open
Description
I have the iOS application with CarPlay support. I don't see the NotificationBanner during CarPlay on the iPhone's display or CarPlay's display.
Because of bannerPositionFrame is nil here:
func show(
placeOnQueue: Bool,
queuePosition: QueuePosition = .back,
bannerPosition: BannerPosition = .top
)
guard bannerPositionFrame != nil else {
remove();
return
}
I investigated a little bit and found the next call stack where appWindow is nil:
internal func updateBannerPositionFrames() {
guard let window = appWindow else { return }
bannerPositionFrame = BannerPositionFrame(
/// The main window of the application which banner views are placed on
private let appWindow: UIWindow? = {
if #available(iOS 13.0, *) {
return UIApplication.shared.connectedScenes
.first { $0.activationState == .foregroundActive || $0.activationState == .foregroundInactive }
.map { $0 as? UIWindowScene }
.flatMap { $0?.windows.first } ?? UIApplication.shared.delegate?.window ?? UIApplication.shared.keyWindow
}
return UIApplication.shared.delegate?.window ?? nil
}()
During CarPlay usage the connectedScenes can contain
<CPTemplateApplicationScene: 0x10a556f50; role: CPTemplateApplicationSceneSessionRoleApplication; activationState: UISceneActivationStateForegroundActive>
<UIWindowScene: 0x10a434c40; role: UIWindowSceneSessionRoleApplication; activationState: UISceneActivationStateForegroundActive>
I propose to use something like this:
var appWindow: UIWindow? {
let scenes: [UIScene] = Array(UIApplication.shared.connectedScenes)
let windowScenes: [UIWindowScene] = scenes.compactMap { $0 as? UIWindowScene } // avoid CarPlay CPTemplateApplicationScene
let foregroundScene: UIWindowScene? = windowScenes.first { $0.activationState == .foregroundActive || $0.activationState == .foregroundInactive }
return foregroundScene?.windows.first
}
To avoid usage of type CPTemplateApplicationScene which cannot be converted to UIWindowScene.
Metadata
Metadata
Assignees
Labels
No labels