본문 바로가기
iOS

[iOS] iOS 13 SDK 적용으로 인한 문제 해결

by 책 읽는 개발자_테드 2020. 4. 8.
반응형

 기존에 사용중인 Xcode 버전은 10 이었고, 해당 Xcode의 iOS SDK는 12 버전이었습니다. 그런데 아래와 같은 메일을 받았고, 앞으로는 iOS 13 SDK 이상 버전을 사용해야만 앱을 업데이트할 수 있는 상황이되어 Xcode 버전을 변경했습니다.

 

 이 과정에서 기존 앱의 코드와 iOS 13 SDK의 호환성 문제가 있었고, 해당 내용을 정리합니다.

 

StatusBar Crash Issue

아래 보이는 앱 화면 처럼 앱 상단의 상태바의 색상을 변경하기 위해 statusBar 기능을 사용 중이었습니다. 

 

iOS 12 까지는 아래 코드 처럼 UIApplication에서 statusBar를 가져와서 색상을 변경했습니다. 

 UIApplication.shared.statusBarView?.backgroundColor = UIColor(rgb: 0xEBB609)

그런데 iOS 13 SDK에서는 해당 코드가 다음과 같은 에러를 뿜으며 앱이 죽어버립니다.

 

2019-10-29 10:43:43.347643+0900 [1632:26572] *** 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를 변경하려면, UIApplcation에서 statusBar를 호출하지 말고 statusBarManager 객체를 사용하라는 에러였습니다. 사용 방법은 잘 정리된 블로그가 있어서 링크합니다.

 

https://calmone.tistory.com/entry/iOS13%EC%97%90%EC%84%9C-StatusBar-Crash-%EC%9D%B4%EC%8A%88-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0

View Controller Presentation Changes

 기존에는 present(_:animated:completion:) 메서드를 통해 화면을 이동하면, 이동한 화면이 아래 그림의 왼쪽 처럼 전체 화면이 전부 보였습니다. 그런데 IOS 13 SDK 부터는 오른쪽  화면처럼 이전 화면이 시트 형태로 보이게 변경되었습니다.

 

 원인은 UIViewController.modalPresentationStyle 속성의 기본 값이 변경된 것 입니다. 따라서 아래 코드처럼 present(_:animated:completion:) 메서드를 통해 화면을 이동할 때 UIViewController.modalPresentationStyle 속성을 기본값인 .automatic이 아닌 .fullScreen으로 변경해주면 문제가 해결됩니다.

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen 
self.present(vc, animated: true, completion: nil)

 

 그런데 또 다른 문제가 있었습니다. 기존 앱에서 present(_:animated:completion:) 메서드를 너무 많이 사용하고 있어

일일이 변경하기 어려웠다는 점....

 

 구글링을 하다 swizzling을 통해 .fullScreen을 화면에 일괄 적용하는 방식을 찾아 링크합니다. (Maxime Ashurov 님의 답변입니다.)

https://stackoverflow.com/questions/56435510/presenting-modal-in-ios-13-fullscreen

 

 

참조

https://calmone.tistory.com/entry/iOS13%EC%97%90%EC%84%9C-StatusBar-Crash-%EC%9D%B4%EC%8A%88-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0

https://gist.github.com/gwangyonglee/53bcc00643e8237a97d0ce7eacb06134

https://medium.com/@hacknicity/view-controller-presentation-changes-in-ios-13-ac8c901ebc4e

https://stackoverflow.com/questions/56435510/presenting-modal-in-ios-13-fullscreen

 

반응형

댓글