천천히 해도 괜찮아

iOS Swift App 프로젝트 초기 설정(iOS 13+) 본문

iOS/Swift

iOS Swift App 프로젝트 초기 설정(iOS 13+)

엘리아 2023. 3. 5. 19:21

안녕하십니까, 엘리아입니다!

저는 iOS App을 만들 때 LaunchScreeen을 제외하고 기본적으로 Storyboard를 사용하고 있지 않습니다. 그래서 사이드 프로젝트를 위한 앱을 만들 때 Storyboard를 사용하지 않고 App 프로젝트 초기 설정을 하는 방법을 찾다가 저에게 큰 도움이 되는 글을 찾았습니다. 

 

How to programmatically setup your app with Scene Delegate in Swift

In iOS 12 and before the AppDelegate would deal with process level events letting you know when the application launched and terminated…

pavankataria.medium.com

 

iOS 13부터 SceneDelegate를 사용해서 window를 관리해 줄 수 있는 방식으로 바뀌었는데 프로젝트 초기 설정 방법을 단계별로 잘 알려주시더라구요.! 오늘은 이 글을 번역해보려고 합니다.

(제 Xcode version 14.2 기준입니다.)


Swift에서 SceneDelegate로 app을 프로그래밍 방식으로 설정하는 법

iOS 12까지 AppDelegate는 애플리케이션이 언제 시작되고 종료되었는지 알려주는 프로세스 수준 이벤트를 처리하고 background, foreground 이벤트 진입과 같은 UI 생명 주기 메서드를 통해서 UI 상태를 알려주었다.

하지만 iOS 13 버전 이후부터는 다양한 content로 여러 앱 인스턴스를 동시에 실행할 수 있는 다중 window session이 추가되었다. window는 scene 또는 UISceneSession 클래스로 관리된다. AppDelegate는 프로세스 이벤트를 처리하고 더 이상 window를 구성할 책임이 없어졌다. 이제부터는 UI 생명주기 이벤트는 SceneDelegate.swift 파일의 UISceneDelegate에서 관리된다. 이렇게 하면 AppDelegate가 더 간결해지고 프로그래밍 방식 entry point가 session 별로 UI 생명 주기 메서드를 받을 수 있는 더 적절한 home이 생긴다.

1. Main 스토리보드 파일 삭제

Main.stroyboard 파일 삭제, ViewController.swift 파일을 삭제한다.

2. info.plit 파일 안에 2개의 key value 값 삭제

  • Storyboard Name
  • Main storyboard file base name

AppleScript 용어로는 각각 UISceneStoryboardFile, UIMainStoryblardFile로 불린다.

* 아래는 삭제 후 info.plist의 화면입니다.

*저의 프로젝트에서는 Xcode 14.2 버전 상에서 Storyboard Name만 있고 Main storyboard file base name이 없어서 Storyboard Name만 삭세함

3. 초기 view controller 만들기

* 자신의 앱과 관련된 이름의 ViewController를 만들면 됩니다

사용자가 앱을 실행했을 때 표시할 초기 ViewController를 만들어야 한다. 계층 구조는 원하는 만큼 복잡하게 만들 수도 있다.

참고로 ViewController를 프로그래밍 방식으로 만들 때 View의 배경색을 설정해주지 않으면 검은색으로 보이기 때문에 viewDidLoad() 메서드에서 view.backgroundColor = .white로 설정해주어야 한다.

마지막. 프로그래밍 방식으로 window 계층 구조 만들기

SceneDelegate에서 window 설정을 한다.

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

    //2. window scene을 가져오는 windowScene을 생성자를 사용해서 새로운 UIWindow를 생성
    let window = UIWindow(windowScene: windowScene)

    //3. view 계층을 프로그래밍 방식으로 만들기
    let viewController = MainViewController()
    let navigationController = UINavigationController(rootViewController: viewController)

    //4. viewController로 window의 root view controller를 설정
    window.rootViewController = navigationController

    //5. window를 설정하고 makeKeyAndVisible()
    self.window = window
    window.makeKeyAndVisible()
}

설정을 잘했다면 저처럼 이렇게 흰 화면을 볼 수 있을 것입니다.

 

만약 제 글에서 잘못된 부분이 있다면 언제든 알려주세요.! 그럼 저는 다음에 돌아오겠습니다. 긴 글 읽어주셔서 감사합니다!

코드 URL

 

MyUniverse/MyUniverse/SceneDelegate.swift at master · yuminc03/MyUniverse

우주의 별을 주제로 하고 별에 대한 정보를 알려주는 앱. Contribute to yuminc03/MyUniverse development by creating an account on GitHub.

github.com

Comments