본문 바로가기
TIL

250320 TIL | 첫 화면 지정하기

by 23g 2025. 3. 20.

TIL: 기존 프로젝트에 로그인 화면 추가하기

오늘은 기존 프로젝트에 첫 화면을 로그인 화면으로 바꾸는 방법을 배웠뜨아

 

기존에 이미 많이 만들어 놓은 프로젝트에서

첫 화면을 로그인 화면으로 바꾸는 과정에서 겪을 수 있는 문제와 그 해결 방법을 정리해봅시다~!

 

+) 추가!!!

첫 화면을 로그인 화면으로 지정하려고 아래와 같은 과정을 거쳤으나

1. 로그인 하지 않아도 이 앱을 사용할 수 있었으면 좋겠음
2. root 화면을 로그인 화면으로 하는 것은 비효율적!

 

위 두가지 이유로 다시 원래의 홈 화면을 첫 화면으로 지정함

 

그래도 써놓은 것은 아까우니 ㅎ 포스팅!

1. SceneDelegate에서 첫 화면 설정

iOS 13 이후부터는 SceneDelegate에서 첫 화면을 설정함

그래서 SceneDelegate 파일을 수정해서 첫 화면을 로그인 화면으로 띄워야 함!

1-1. SceneDelegate.swift 수정

SceneDelegate.swift에서 첫 화면을 설정하려면 scene(_:willConnectTo:options:) 메소드 안에 코드를 추가해야 함!

기존의 window?.rootViewController를 로그인 화면으로 바꿈

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }

        // 스토리보드에서 LoginViewController를 가져옴
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        
        // LoginViewController를 안전하게 가져옴
        if let loginVC = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController {
            window?.rootViewController = loginVC
            window?.makeKeyAndVisible()
        }
    }
}
  • UIStoryboard(name: "Main", bundle: nil)로 Main.storyboard에서 화면을 가져옴
  • instantiateViewController(withIdentifier:)로 로그인 화면을 로드.
  • window?.rootViewController로 로그인 화면을 첫 화면으로 설정.

이거 그냥 외우면 될 것 같지만 이해가 잘안돼서 한 번 정리하고 넘어가겠음!

UIStoryboard(name: "Main", bundle: nil)Main.storyboard 파일을 코드로 불러오는 방법
"Main"은 스토리보드 파일 이름이고, bundle: nil은 기본 리소스에서 파일을 찾겠다는 의미임.
이 후, instantiateViewController(withIdentifier:)로 스토리보드 안의 화면을 코드에서 가져와 사용할 수 있음
Storyboard ID는 스토리보드에서 각 화면을 구분할 수 있도록 설정하는 식별자임

2. 스토리보드에서 LoginViewController 설정

SceneDelegate에서 로그인 화면을 제대로 가져오기 위해선 Storyboard ID를 설정해야 함

Main.storyboard에서 LoginViewController를 선택하고 Identity Inspector에서 Storyboard ID를 "LoginViewController"로 설정

이렇게 하면 SceneDelegate에서 이 ID로 로그인 화면을 가져올 수 있음

위에서 instantiateViewController로 가져올 수 있겠쥬?

3. 문제 해결

처음에 instantiateViewController(withIdentifier:) 호출할 때 nil 오류가 났었음 ㅠ

원인은 Storyboard ID가 잘못되거나 설정이 안 되어 있어서 그랬던 것~

그래서 스토리보드에서 Storyboard ID를 확인하고 수정한 후, 정상적으로 동작하는 걸 확인함

4. 결론

이 방법으로 기존 앱에 로그인 화면을 첫 화면으로 쉽게 추가할 수 있었음

SceneDelegate에서 첫 화면을 설정하고, Storyboard ID를 잘 설정하는 게 핵심!

다음엔 로그인 후 홈 화면으로 넘어가는 기능도 추가할 예정임

원래의 홈 화면으로 넘어갈 때 잘 되려나... ㅠ 걱정~