UIKit과 SwiftUI
- 새로운 SwiftUI 기반의 프로젝트를 생성하면 실제로 Xcode는 SwiftUI 뷰들이 앱을 만드는 주체가 되도록 하기 위해 통합 기술을 사용하는 UIKit 기반의 앱을 생성함
- 따라서 몇몇 파일은 UIKit 기반이며 UI라는 접두사 붙은 모든 클래스는 UIKit 클래스
AppDelegate.swift 파일
- UIWindow 인스턴스
- iOS 앱은 이벤트 처리와 UI를 표시하기 위해 앱에 의해 사용될 서로 다른 UIWindow 객체를 관리하는 UIApplication 클래스의 인스턴스 하나를 가짐
- 사용자에게 보이지 않지만 UI를 구성하는 시각적 객체를 담기 위한 컨테이너 제공
- UIApplication 인스턴스
- 앱의 생명 주기와 관련된 중요한 이벤트(앱 실행, 알림 수신, 디바이스 메모리 부족, 앱 종료 보류, 앱 내에 새로운 화면 생성 등)에 대한 메서드 호출하여 알림을 주는 델리게이트와 연결
- AppDelegate.swift 파일
- AppDelegate 프로토콜을 따르는 필수 메서드만 포함하지만, 다른 종류의 앱 생명 주기 이벤트의 알림을 받기 위해 관련 메서드 추가 가능
- 이러한 메서드는 네트워크 연결 구축 데이터베이스 접근 설정과 같이 앱 초기에 해야 할 초기화 작업을 구현하는 데 유용함
- didFinishLaunchingWithOptions 메서드 : 초기화 코드 추가할 때 유용 → 앱 실행 후 첫 호출 메서드
SceneDelegate.swift
- 앱의 UI는 전부 UIWindow 의 자식인 UIWindowScene 객체의 형태인 화면(scene)으로 표시됨
- 앱 사용자 인터페이스 내에 단일 화면만 나타내는 UIKit 스토리보드 화면과 혼동하지 않는 것이 중요
- iOS 13에서 다중 윈도우 지원 이후 앱 스위처를 이용하여 UI 복사본 간의 전환 가능
- 아이패드에서 UI 복사본이 나란히 표시됨
- 여러 화면에서 동일한 UIApplication 객체를 공유하지만, 다중 윈도우 구성에서의 각 UIWindowScene 인스턴스는 자신만의 화면 델리게이트 인스턴스를 가짐
- SceneDelegate 클래스
- UIWindowSceneDelegate 프로토콜 구현
- 현재 세션과 연결되는 새로운 화면 객체, 백그라운드와 포그라운드 간의 화면 전환, 또는 앱에서 연결이 끊긴 화면과 같은 이벤트 처리 메서드 포함
- 모든 메서드는 앱의 생명주기 동안 초기화와 초기화 해제 작업을 수행하는데 유용함
- 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 파일
- ex) 다중 윈도우 지원을 활성화하기 위한 설정 포함됨
LaunchScreen.storyboard
- 앱이 실행될 때 사용자에게 표시되는 화면의 사용자 인터페이스 레이아웃을 담는 스토리보드 파일
- UIKit 스토리보드 화면으로 SwiftUI가 아닌 인터페이스 빌더를 이용하여 설계됨
'SwiftUI' 카테고리의 다른 글
SwiftUI - 스택, 프레임 (1) | 2024.01.13 |
---|---|
SwiftUI - 커스텀 뷰 생성 (1) | 2024.01.10 |
SwiftUI - SwiftUI 모드로 Xcode 이용 (1) | 2024.01.07 |
SwiftUI - 개요 (0) | 2024.01.07 |
SwiftUI - @Binding (0) | 2023.08.25 |