시작하기에 앞서, SwiftUI가 도입되기 전에는 UIKit을 이용하여 iOS 앱을 개발하였다. 그렇기에 애플은 SwiftUI와 UIKit 코드가 동일한 프로젝트 내에 통합되도록 하는 여러 방법을 제공한다.
새로운 SwiftUI 기반의 프로젝트를 생성하면, 실제로 Xcode는 SwiftUI 뷰들이 앱을 만드는 주체가 되도록 하기 위해 통합 기술을 사용하는 UIKit 기반의 앱을 생성한다. 그렇기에, 앞으로 나오는 UI라는 접두사가 붙은 모든 클래스는 UIKit 클래스임을 알자 !!
AppDelegate.swift 파일
모든 iOS 앱은 이벤트 처리와 UI를 표시하기 위하여 앱에 의해 사용될 서로 다른 UIWindow 객체를 관리하는 UIApplication 클래스의 인스턴스 하나를 갖는다.
- UIWindow 인스턴스 : 사용자에게 보이지 않지만 UI를 구성하는 시각적 객체를 담기 위한 컨테이너 제공
- UIApplication 인스턴스 : 앱의 생명 주기와 관련된 중요한 이벤트에 대한 메서드 호출을 통해 알림을 주는 Delegate와 연결
이벤트 : 앱 실행, 알림 수신, 디바이스 메모리 부족, 앱 종료 보류, 앱 내의 새로운 화면 생성 등
AppDelegate.swift 파일은 Xcode에 의해 디폴트로 생성되고, AppDelegate 프로토콜을 따르는 필수 메서드들을 포함한다. 그리고, 다른 종류의 앱 생명 주기 이벤트의 알림을 받기 위해 관련된 메서드를 추가할 수도 있다.
👉🏻 이러한 메서드들은 네트워크 연결 구축, DB 접근 설정과 같이 앱 초기에 해야 할 초기화 작업을 구현하는 데 유용 !
didFinishLaunchingWithOptions 메서드 : 초기화 코드를 추가하는 데 특히 유용. 앱이 실행된 후에 첫 번째로 호출되는 메서드
SceneDelegate.swift 파일
앱의 UI 전부는 UIWindow의 자식은 UIWindowScene 객체의 형태인 Scene으로 표시된다. 앱은 단 하나의 화면만 갖겠지만 다중 윈도우가 지원되면서 여러 개의 UI 인스턴스로 앱을 구성할 수 있다.
여러 화면은 동일한 UIApplication 객체를 공유하지만, 다중 윈도우 구성에서의 각 UIWindowScene 인스턴스는 자신만의 SceneDelegate 인스턴스를 가진다.
SceneDelegate 클래스 파일은 UIWindowSceneDelegate 프로토콜을 구현하고, 현재 세션과 연결되는 새로운 화면 객체, 백그라운드와 포그라운드 간의 화면 전환, 또는 앱에서 연결이 끊긴 화면과 같은 이벤트를 처리하는 메서드를 포함한다. SceneDelegate의 모든 메서드는 앱의 생명 주기 동안 초기화와 초기화 해제 작업을 수행하는 데 유용하다.
👉🏻 이 파일에서 가장 중요한 Delegate 메서드는 willConnectTo 메서드 !
willConnectTo 메서드 : 새로운 화면 객체가 앱에 추가될 때마다 호출되는 메서드
willConnectTo 메서드
- ContentView.swift 파일에 선언된 ContentView의 인스턴스를 생성하고 사용자에게 보이도록 한다.
- 이 메서드 내에서 UIKit 아키텍처와 SwiftUI가 연결된다고 볼 수 있다.
UIKit 프로젝트 내에서 SwiftUI 뷰가 포함되기 위해서는 SwiftUI 뷰가 UIHostingController 인스턴스에 포함되어야 한다.
이후에 자세히 다루기로 하자 !
willConnectTo 메서드의 수행 과정
- ContentView 인스턴스 생성
- 새로운 UIWindow 객체 생성
- UIHostingController 인스턴스에 ContentView 객체 포함
- UIHostingController를 새롭게 생성된 UIWindow 객체의 Root View Controller로 할당
- 화면의 현재 UIWindow 인스턴스를 새로운 인스턴스로 치환
- 사용자에게 윈도우 표시
ContentView.swift 파일
SwiftUI View 파일로, 앱이 시작할 때 나타날 첫 화면의 내용을 담는다. 앱 개발 시 대부분의 작업이 수행되는 곳이다.
Assets.xcassets
해당 폴더는 에셋이 포함되며, 이미지, 아이콘, 색상 등 앱에서 사용되는 리소스를 저장하기 위해 사용된다.
Info.plist
정보 프로퍼티 리스트 파일로, 앱을 구성하는 데 사용되는 키-값 쌍으로 된 XML 파일이다.
예를 들어, 다중 윈도우 지원을 활성화하기 위한 설정은 이 파일에 포함된다.
LaunchScreen.storyboard
앱이 실행될 때 사용자에게 표시되는 화면의 UI 레이아웃을 담는 스토리보드 파일이다.
UIKit Storyboard 화면이므로 SwiftUI가 아닌 인터페이스 Builder를 이용하여 설계된다.
마치며...
항상 프로젝트를 생성하면 자동으로 생성되던 파일들이었기에
각 파일들이 무슨 역할을 하는지 잘 알지도 못한 상태에서 필요한 파일들만 건드렸었다.
이렇게 전체적인 Xcode 파일 구조를 알고 나니 각 파일들을 다룰 때 쉽게 접근할 수 있을 것 같다 : )
출처 : Swift 기반의 iOS 프로그래밍
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] UserDefaults와 @AppStorage (0) | 2023.02.04 |
---|---|
[SwiftUI] SwiftUI와 Firebase를 이용한 사용자 계정 관리 (회원가입) (1) | 2022.12.18 |
[SwiftUI] SwiftUI의 Stack, Frame, GeometryReader (0) | 2022.11.30 |
[SwiftUI] SwiftUI로 커스텀 뷰 수정하기 (0) | 2022.11.22 |
[SwiftUI] SwiftUI로 커스텀 뷰 생성하기 (0) | 2022.11.14 |