iOS13 window 접근 에러 (SceneDelegate 변경 접근하기)
안녕하세요. 오늘은 Xcode SceneDelegate 개념이 추가되면서 UIApplication Window 접근이 되지 않아 난처한 상황을 해결했던 점에 대해서 공유드립니다.
iOS 13 MultiWindow 개념이 생기면서 단일이 아닌 Multi로 변경되면서 Window 관리는 Scene 에서 하도록 변경되었습니다.
샘플코드
// iOS 13 이후 문제가 되었던 부분. _applicationWindow = [[[UIApplication sharedApplication] delegate] window];
위와같이 기존에 사용하고 있던 상황에서 SceneDelegate 가 추가됨에 따라 에러가 발생하게 됩니다.
extension UIApplication { @objc(currentWindow) var currentWindow: UIWindow? { connectedScenes .filter({$0.activationState == .foregroundActive}) .map({$0 as? UIWindowScene}) .compactMap({$0}) .first?.windows .filter({$0.isKeyWindow}).first } } // 실제 호출시 // Objc [[UIApplication sharedApplication] currentWindow]; // Swift UIApplication.shared.currentWindow
마무리
UIApplication Extentsion 을 활용하여 currentWindow 라는 변수를 만들었는데, 아직은 완벽하진 않은것 같습니다. 단일 window 사용시에는 문제가 없으나 iPad 기준으로 MultiWindow 지원 후 여러화면 active 2개이상 활성화 후 사용해보면 죽는경우가 있는데, 파악이 정확하게는 되지 않았습니다...애플측에서 현재 window 지원하는 키는 정확하게 알려줘야 개발시 편할 것 같은데 아쉽습니다.
추후에 window 관련 함수, 변수가 나오면 해당 글에 추가하도록 하겠습니다.
즐거운 코딩 되세요.
댓글
댓글 쓰기