iOS 코드베이스 적용

JG Ahn·2024년 12월 2일

iOS

목록 보기
7/32
post-thumbnail

앱구현 과제를 할 때 구현하기에 급급해 코드베이스로 적용하는 방법에 대해 이렇게 하는구나 정도로만 알아두고 넘어갔었기 때문에 한 번 정리를 해두고 넘어가야겠다는 생각이들었다.(초기세팅)

스토리보드 ➡️ 코드베이스 적용 절차

  1. Main.storyboard 삭제
  2. info.plist 설정 : command + f ➡️ main 검색 및 삭제
  3. Build Settings : 프로젝트 클릭 ➡️ Build Settings ➡️ command + f ➡️ main 검색 및 삭제
  4. SceneDelegate 설정

SceneDelegate 설정


코드베이스로 적용할 경우 SceneDelegate.swift 파일에서 scene 부분을 설정해줘야한다.
var window: UIWindow?는 앱에 반드시 필요한 root view이다. 이 뷰에 다른 뷰들을 쌓게된다.

(iOS12까지는 appDelegate가 뷰를 관리해서 appDelegate에 작성했었다고 한다.)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow? //앱에 반드시 필요한 근본 뷰. 이 뷰에 뷰들이 쌓이기 시작.

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, 
    			options connectionOptions: UIScene.ConnectionOptions) {
      
        guard let windowScene = (scene as? UIWindowScene) else { return }
        let window = UIWindow(windowScene: windowScene)
        
        window.rootViewController = ViewController()
        
        window.makeKeyAndVisible()
        self.window = window
    }
    
...이하생략

UIWindowScene

UIWindowScene객체는 앱 UI 인스턴스를 관리하며, scene에 포함된 하나 이상의 window를 관리한다.

scene객체는 디바이스의 windows의 표시를 관리하고, 사용자가 상호작용하는 scene의 생명주기를 관리한다.

guard let windowScene = (scene as? UIWindowScene) else { return }

위 코드는 scene객체를 UIWindowScene으로 타입 캐스팅

UIWindow

UI에 배경을 제공하고, Event를 View에 전달하는 객체

makeKeyAndVisible()

현재 창을 화면에 표시하고, 동일 level 또는 더 낮은 수준의 창들 앞에 배치하며, 키 윈도우로 만든다.


흐름 정리

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, 
    			options connectionOptions: UIScene.ConnectionOptions) {
      
        //1. scene객체 생성
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        //2. UIWindow객체 생성(scene객체를 매개변수로 사용)
        let window = UIWindow(windowScene: windowScene)
        
        //3. UIWindow객체의 rootViewController로 ViewController를 설정
        window.rootViewController = ViewController()
        
        //4. UIWindow객체를 화면에 표시한다.
        window.makeKeyAndVisible()
        self.window = window
    }

0개의 댓글