# [Swift] UIApplecation getWindow 코드 개선건 안녕하세요 __물먹고하자__ 입니다 :) window를 가져오는 로직(블로그) 예전에 작성했었는데, 실제 사용하다보면 __.forgroundActive__가 아니여서 nil 처리되는 현상이 종종나오더군요. 테스트 해보고 개선한 부분에 대해서 공유드립니다. --- ## 1. activationState 값 알아보기 > 💡 UIScene.ActivationState(링크) iOS 13.0 - unattached : 연결되있지 않음 - foregroundInactive : 실행되고 있지만, 이벤트 수신하지 못한상태 - foregroundActive : 실행중 이고, 이벤트 수신하고 있는 상태 - background : 백그라운드 실행중 이부분은 다시 체크해본 이유가 __window.safeAreaInsets__값을 사용하는 부분이 있는데, 반복해서 진입하다보면 어느새 window? = nil 인 경우가 발생하더라구요. 이부분을 디버그로 체크한게 아니라 실사용중에 (저부분이 왜? safeArea가 안먹었지)로 찾아봤습니다. safeArea가 안먹었을때 예전 노치디자인이 아닌 사이즈로 나오게 되는데, 이부분이 의심되서 코드 확인진행 --- ## 2. foregroundInactive, foregroundActive 언제 찍히나? >💡 테스트 진행 1. 앱이 일반적인 루트로 실행 > 메뉴 진입 __(foregroundActive)__ 2. 푸시 알림 루트로 실행 > 메뉴진입 __(foregroundInactive)__ ``` swift /* 2025. 01. 21 Kimjiwook - currentWindow 변경 ㄴ 푸시 진입시에 foregroundInactive 인경우가 많은 확인진행 */ @objc(currentWindow) var currentWindow: UIWindow? { connectedScenes .filter { scene in guard scene is UIWindowScene else { return false } // .foregroundActive 또는 .foregroundInactive인 경우를 모두 포함 return scene.activationState == .foregroundActive || scene.activationState == .foregroundInactive } .compactMap { $0 as? UIWindowScene } .first? .windows .first(where: { $0.isKeyWindow }) } ``` --- ## 마무리 window 가져오는 부분에서 예전에 foregroundActive만 체크했다가 foregroundInactive 같이 추가하게 되었습니다. 일단 해당부분에 대허서 GPT도 같이 물어보니 맞는것 같더군요. 실 사용테스트는 좀더 해봐야겠습니다. 오늘은 이만~ 즐거운 코딩 되게요. 끝.
댓글
댓글 쓰기