[TIL] 트러블슈팅: 화면이 보이지 않는 문제

Eden·2024년 12월 30일
1

TIL

목록 보기
82/92
post-thumbnail

문제 상황

발생 일시: 2024-12-30
발생 환경: iOS 16.6, Xcode 16.2, UIKit 사용
문제 내용:

  • 앱 실행 시 화면이 검은 화면으로 표시됨.
  • print문 출력이 로그에 나타나지 않음.
  • Info.plist 및 SceneDelegate가 제대로 설정되었는지 불확실.

원인 분석

1. SceneDelegate 문제

  • SceneDelegate에서 window 또는 rootViewController가 제대로 설정되지 않았을 가능성.
  • MainTabBarController 초기화 중 오류 발생 가능성.

2. Info.plist 설정 문제

  • Storyboard Name 항목이 남아 있어, 스토리보드를 찾으려다 실패했을 가능성.

3. 시뮬레이터 문제

  • 시뮬레이터의 설정 또는 캐시 문제로 인해 화면이 표시되지 않을 가능성.

4. Xcode 캐시 문제

  • Derived Data와 관련된 캐시 문제가 앱 실행에 영향을 줄 수 있음.

해결 과정

1. SceneDelegate 코드 점검 및 테스트

  • 간단한 테스트용 뷰컨트롤러로 설정하여 SceneDelegate가 호출되는지 확인:

    func scene(
        _ scene: UIScene,
        willConnectTo session: UISceneSession,
        options connectionOptions: UIScene.ConnectionOptions
    ) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        let window = UIWindow(windowScene: windowScene)
        let testViewController = UIViewController()
        testViewController.view.backgroundColor = .blue
        window.rootViewController = testViewController
        window.makeKeyAndVisible()
        self.window = window
        
        print("Window initialized: \(window.debugDescription)")
        print("Root ViewController: \(String(describing: window.rootViewController))")
    }
  • 결과: 파란색 화면이 나타나 SceneDelegate가 호출되고 있음이 확인됨.


2. MainTabBarController 점검

  • MainTabBarController가 초기화 중 오류가 없는지 확인:

    class MainTabBarController: UITabBarController {
        override func viewDidLoad() {
            super.viewDidLoad()
            view.backgroundColor = .white
            
            let testVC = UIViewController()
            testVC.view.backgroundColor = .red
            testVC.tabBarItem = UITabBarItem(title: "테스트", image: nil, selectedImage: nil)
            
            viewControllers = [testVC]
        }
    }
  • 결과: 정상적으로 빨간 화면과 탭 바가 표시됨. MainTabBarController는 정상 동작.


  1. Info.plist 설정 수정
  • Storyboard Name 항목을 삭제

  • 결과: Info.plist 설정 오류가 제거됨.


  1. Derived Data 삭제 및 클린 빌드
  • Derived Data 삭제:

    rm -rf ~/Library/Developer/Xcode/DerivedData
  • Xcode에서 Shift + Command + K를 눌러 클린 빌드 수행.

  • 결과: 앱 캐시 문제 제거 후 앱이 정상적으로 빌드됨.


  1. 시뮬레이터 리셋
  • 시뮬레이터 메뉴에서 Device > Erase All Content and Settings를 선택하여 초기화 후 다시 실행.

  • 결과: 시뮬레이터 문제도 제거됨.


결과

  • SceneDelegate와 MainTabBarController가 정상적으로 작동하며, 앱 실행 시 화면이 표시됨.
  • Info.plist 설정 오류와 캐시 문제를 수정하여 문제를 해결함.

향후 개선 사항

1. 프로젝트 설정 점검

  • 스토리보드를 사용하지 않는 경우, Info.plist 설정을 초기부터 정확히 구성.

2. 테스트 코드 활용

  • 문제가 발생할 경우 최소한의 코드로 진입점 확인.

3. 로그 출력 확인

  • print를 활용해 진입점과 초기화 과정을 점검.
profile
Frontend🌐 and iOS

1개의 댓글

comment-user-thumbnail
2024년 12월 30일

헐 엄청 깔끔하게 정리잘하시네요.. 향후 개선사항까지 ㅠㅠ 저두 트러블슈팅작성할때 좀더 두서있게 적어야겠어여..

답글 달기