UIKit이란?
UIKit 프레임워크
UIKit은 iOS, iPadOS 그리고 tvOS 앱의 이벤트 중심 UI를 구성하고 관리하는 프레임워크이다.
UIKit은 앱 개발에 필요한 핵심 컴포넌트와 다양한 기능을 제공하는데, 예로 들어 UI를 구현하기 위한 윈도우와 뷰 아키텍처, 멀티 터치 및 다른 타입의 입력을 위한 이벤트 처리 인프라, 사용자와 시스템 그리고 앱 간의 상호작용을 관리하는 메인 런 루프가 있다.
UIKit은 또한 애니메이션, 문서, 그리기 및 프린트, 텍스트 관리와 출력, 검색, 앱 익스텐션, 리소스 관리, 그리고 현재 디바이스에 대한 정보 가져오기 등에 대한 지원을 제공한다.
또한 손쉬운 사용(accessibility)을 커스터 마이즈할 수 있고, 언어나 국가에 따라 앱의 UI를 현지화할 수 있다.
UIKit은 SwiftUI와 원활하게 작동하므로, UIKit 앱의 일부를 SwiftUI에서 실행할 수도 있고 두 프레임워크의 인터페이스를 섞을 수도 있다.
예를 들어 SwiftUI 뷰안에 UIKit 뷰와 뷰 컨트롤러를 사용할 수 있으며, 물론 반대로도 가능하다.
UIKit 클래스는 문서에서 별도로 설명하지 않는 한 앱의 메인 스레드 또는 메인 디스패치 큐에서만 사용해야 한다.
그중에서도 UIResponder에서 파생된 클래스나 앱의 UI를 다루는 클래스의 경우 더욱 주의해야 한다.
빌드와 앱 번들
앱을 빌드 하면 Xcode는 소스 파일을 컴파일하고, 앱 번들을 생성한다.
앱 번들이란 앱과 연관된 코드와 리소스를 포함하는 디렉토리이다.
리소스는 이미지 에셋, 스토리보드 파일, 스트링 파일, 앱 메타 데이터 등을 포함한다.
모든 UIKit 앱은 앱 아이콘과 런치 스크린 스토리보드가 필요하다.
시스템은 홈버튼, 설정과 같이 특정 앱을 다른 앱들과 구분이 필요한 상황에서 앱 아이콘을 보여준다.
앱은 여러 디바이스에서 실행되므로, 다양한 사이즈의 앱 아이콘을 사용할 수 있고 이미지 크기에 맞게 아이콘의 디테일을 바꿀 수 있다.
앱 아이콘을 탭 하게 되면, 시스템은 앱이 실행 중임을 보여주기 위해 즉시 런치 스크린을 띄운다. 앱이 준비되면, 시스템은 런치 스크린을 숨기고 앱의 실제 인터페이스를 보여준다.
시스템은 Info.plist(information property list)로부터 앱 설정과 기능에 대한 정보를 불러온다.
info.plist는 기본 설정이 되어있고, 필요에 따라 특정 부분을 수정할 수 있다.
만약 앱이 특정 하드웨어에 종속적이거나, 특정 시스템 프레임워크를 사용한다면, 이 파일에 이러한 특성에 관련된 정보를 추가할 수 있다.
흔히 Info.plist을 앱의 하드웨어와 소프트웨어 요구사항을 설정하기 위해 사용한다.
이 요구사항은 앱이 작동하기 위해 필요한 사항을 시스템에게 전달하는 방법이다.
예로 들면 내비게이션 앱이 방향을 안내하기 위해서는 GPS가 필요할 것이다.
앱스토어는 이러한 앱의 요구사항에 충족하지 않는 앱을 설치할 수 없도록 막는다.
UIKit App의 코드 구조
UIKit은 앱의 핵심 오브젝트들을 제공한다.
이들은 시스템과 상호작용하고, 앱의 메인 이벤트 루프를 실행하고, 콘텐츠를 스크린에 보여준다.
제공되는 오브젝트들을 수정해서 사용할 수도 있는데, 어떤 오브젝트를 언제 수정하는지는 매우 중요하다.
UIKit 앱 구조는 MVC(Model-View-Controller) 디자인 패턴을 기반으로 한다.
모델 객체는 앱의 데이터와 비즈니스 로직을 관리하고, 뷰 객체는 데이터의 시작적 표현을 제공하며, 컨트롤러 객체는 모델 객체와 뷰 객체 사이에 데이터를 전달한다.
UIKit은 많은 뷰 오브젝트를 제공하지만, 필요에 따라 커스텀 뷰를 정의할 수 있다.
데이터 객체와 UIKit 뷰 간의 데이터 교환은 거의 뷰 컨트롤러와 앱 델리게이트 객체를 통해 조정한다.
아래 그림은 전형적인 UIKit 앱 구조이다.
UIKit과 Foundation 프레임워크는 앱의 모델 객체를 정의하기 위해 사용되는 다양한 기본 타입들을 제공하고 있다.
UIKIt은 디스크 기반 파일에 속한 데이터 구조를 조직화하기 위한 UIDocument 객체를 제공한다.
Foundation 프레임워크는 문자열, 수, 배열 그리고 다른 데이터 타입들을 보여주는 기본적인 객체들을 정의한다.
Swift Standard Library는 Foundation에서 사용할 수 있는 여러 가지 동일한 타입들을 제공한다.
UIKit은 앱의 뷰 레이어와 컨트롤러의 많은 객체들을 제공한다.
특히 UIKit에서 UIView 클래스를 정의하는데, 이는 보통 컨텐츠를 스크린에 표시하는 역할을 한다.
물론 Metal 또는 다른 시스템 프레임워크를 사용하여 직접 컨텐츠를 렌더링할 수도 있다.
UIApplication 객체는 앱의 메인 이벤트 루프를 실행하고, 또한 앱의 전반적인 라이프사이클을 관리한다.
Leave a comment