iOS Trouble Shooting

[iOS] iOS13 StatusBar Crash 이슈

devharrry 2020. 1. 5. 02:00

안녕하세요.

 

이번 글에서는 iOS에서 상태바 컬러를 변경하기 위해 StatusBar를 가져오는 코드가 iOS13에서는 가져올 수 없는 이슈가 있어 현재까지 찾은 방법을 공유하려고 합니다.

이슈

저는 현재 이 코드를 이용해서 StatusBar를 가져오고 있었는데

UIApplication.shared.value(forKey: "statusBar") as? UIView

Xcode11 GM Seed 2, iOS 13 환경에서 빌드하면 아래 로그가 찍히며 Crash가 발생합니다.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window.
Use the statusBarManager object on the window scene instead.'

로그를 잘 읽어보면,
'해당 코드에서 statusBar를 가져올 수 없으니 window scene object의 statusBarManager 객체를 사용하라' 라고 적혀있습니다.

 

developer apple document로 가보면 https://developer.apple.com/documentation/uikit/uistatusbarmanager

 

UIStatusBarManager - UIKit | Apple Developer Documentation

A Boolean value indicating whether the status bar is currently hidden.

developer.apple.com

StatusBar를 가져올 수 있는 프로퍼티가 없습니다 ㅠㅠ

 

현재까지 찾은 해결 방법

StatusBar Frame만큼 View를 그려서 addSubView하는 방식

let statusBarFrame = UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame
let statusBar = UIView(frame: statusBarFrame)
view.addSubView(statusBar)

 

혹시 해당 이슈를 좀 더 좋은 방법으로 해결하신 분 있으면 https://gist.github.com/gwangyonglee/53bcc00643e8237a97d0ce7eacb06134 comment 주시면 감사하겠습니다:)

 

iOS13 StatusBar Crash Issue

iOS13 StatusBar Crash Issue . GitHub Gist: instantly share code, notes, and snippets.

gist.github.com