본문 바로가기
프로그래밍/Xcode-iOS

iOS13 statusBar Crash오류 관련

by Mr-후 2019. 10. 29.
반응형

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];


반응형