iOS13 statusBar Crash오류 관련
정말 별생각없이(?) Mac OS와 Xcode를 업데이트 했다.
macOS Catalina 버전 10.15 , Xcode 11.1 로 업데이트 하면서 iOS13 이 기본 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.'
당황스러움에 검색을 하니 이미 겪은 분이 올린 글이 있다. Swift버전으로.
해서 Objective-C버전으로 변경해서 대응 방안과 원본 글을 링크 한다.
iOS13 StatusBar Crash 이슈
- (UIView *)getStatusBar {
UIView *statusBar = nil;
if(@available(iOS 13.0, *)) {
NSInteger tag = 1083392852;
statusBar = [UIApplication.sharedApplication.keyWindow viewWithTag:tag];
if (statusBar == nil) {
UIView *_statusBar = [[UIView alloc] initWithFrame:UIApplication.sharedApplication.statusBarFrame];
_statusBar.tag = tag;
[UIApplication.sharedApplication.keyWindow addSubview:_statusBar];
statusBar = _statusBar;
}
} else {
statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
}
return statusBar;
}
코드는 별건 없고 태그를 기반으로 statusBarFrame을 얻어 뷰를 상단에 넣는다는 이야기다.
상태바 컬러를 화면별로 변경해야하는 디자인이라 여러곳에서 사용하고 있는데 Util에 따로 빼서 공통으로 사용하도록 만들었다.
사용하는 예는 다음과 같다.
UIView *statusBar = [[Utils shared] getStatusBar];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = [UIColor clearColor];
}
[self setNeedsStatusBarAppearanceUpdate];
'프로그래밍 > Xcode-iOS' 카테고리의 다른 글
iOS 13 dark mode(다크모드) 대응 방법 (0) | 2019.11.05 |
---|---|
iOS boundingRectWithSize 구하기. (0) | 2019.11.05 |
Null passed to a callee that requires a non-null argument (0) | 2019.10.24 |
UIRefreshControl & UITableView refreshControl사용 예 (0) | 2019.10.23 |
iOS statusbar backgroundColor 변경 (0) | 2019.10.18 |