기존에 사용중인 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 객체를 사용하라는 에러였습니다. 사용 방법은 잘 정리된 블로그가 있어서 링크합니다.
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://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
'iOS' 카테고리의 다른 글
[iOS] 키보드가 올라오면서 뷰를 가리는 현상 제거 (Swift) (1) | 2020.06.17 |
---|---|
[iOS] UILabel vs UITextField vs UITextView (0) | 2020.04.23 |
[iOS] Search Bar, UISearchBarDelegate 리스트에 검색 기능 추가하기 (0) | 2020.03.13 |
[iOS] Spring 서버에서 사용할 APNS 인증서 준비 (0) | 2020.01.16 |
[iOS] 스토리보드를 통한 기본 화면 구성(Storyboard, View, View Controller, UIKIT, viewDidLoad) (0) | 2020.01.16 |
댓글