iOS

공식문서로 UIKit공부하기: UIKit에 대해서

소재훈 2022. 3. 27. 14:26

 

Apple Developer Documentation

 

developer.apple.com

애플 공식문서에 나와있는 UIKit과 Xcode가 iOS와 tvOS를 위해서 제공하는 기본적인 기능들에 대해서 알아보자

 

🖍 Overview

UIKit 프레임워크는 iOS와 tvOS앱을 개발하기 위해서 필요한 필수적인 요소들을 제공해준다. 개발자가 원하는 콘텐츠를 화면에 출력하거나, 콘텐츠와 상호작용하거나, 시스템과 상호작용하도록 할 수 있다. 또한 앱도 기본적인 동작을 UIKit에 의존하고, UIKit은 이러한 동작들을 개발자의 의도에 맞도록 커스텀하는 여러 방법들을 제공해준다.

 

Xcode는 앱을 처음만들었을때의 기본 템플릿을 제공해준다. 예를 들어서, 아래의 사진은 Single View App 프로젝트를 생성했을 때 Xcode에서 제공해주는 템플릿의 형태이다. 템플릿에는 최소한의 유저 인터페이스만 제공되기 때문에 바로 빌드하고 실행해 볼 수 있다.

앱을 빌드하게 되면 Xcode는 소스파일을 컴파일하고, 프로젝트를 위한 앱 번들(App Bundle)을 생성해준다. 이 앱번들은 앱과 관련된 코드와 리소스들을 포함하고 있는 디렉토리이다. 리소스라 하면, 프로젝트에서 사용되는 이미지, 스토리보드 파일, 문자열 파일, 그리고 앱의 메타데이터등을 말한다.

 

🖍 리소스 요구사항

모든 UIKit앱은 아래와 같은 리소스를 요구한다

  • 앱 아이콘(App icons)
  • 런치 스크린 스토리보드(Launch screen storyboard)

시스템이 앱의 아이콘을 홈 스크린, 설정 및 다른 앱과 구별하기 위해서 필요한 위치에 앱 아이콘(App icon)을 표시해준다.
앱 아이콘은 하나의 기기뿐만 아니라 여러 장치에서 사용될 수 있으므로, 앱 아이콘을 등록할 때는 여러버전의 아이콘을 등록해주어야 합니다. 아래의 이미지를 보면 iPhone Notification, iPhone, iPhone Spotlight, iPad등 여러 버전의 아이콘을 등록해 줄 것을 요구하고 있다.

LaunchScreen.storyboard파일은 앱의 초기 인터페이스를 등록하는 스토리보드 파일이다. 앱을 실행하면 화면에 잠깐 나타나고, 앱의 시작화면을 나타내거나, 아니면 앱의 인터페이스를 단순화해서 나타낼 수 있습니다. 사용자가 앱의 아이콘을 누르면 시스템이 LaunchScreen.storyboard파일에 등록한 화면을 표시해서 앱이 지금 시작중임을 알려준다. 앱 실행 준비가 완료되면 시스템이 시작화면을 숨기고 앱의 실제 인터페이스를 표시해준다.

 

🖍 앱 메타데이터 요구사항 등록

시스템은 앱 번들의 정보, 속성목록을 담고있는 Info.plist파일에서 앱의 구성 및 기능 정보를 가져온다. Xcode에서는 프로젝트를 생성하면 아직 설정되기 전의 환경설정 Info.plist파일을 제공해주고, 앱의 설정에 맞게 개발자가 이 파일을 설정해 주면 된다. 예를 들어서, 앱이 특정 하드웨어에 의존하거나 특정 시스템 프레임워크를 사용할경우 이 파일(Info.plist)을 상황에 맞게 수정해야한다.

 

앱의 하드웨어와 소프트웨어 요구사항을 선언하기 위해서 Info.plist파일을 수정할 수 있다. 요구사항이란 앱의 실행에 필요한 사항을 시스템에 전달하는 것을 말한다. 여기서 요구사항을 설정하면 앱스토어에서 원치 않는 하드웨어나 소프트웨어에서 실행되는 것을 방지해준다. 아래 이미지는 Info.plist의 Required device capabilities 에서 앱의 하드웨어와 소프트웨어 요구사항을 등록할 수 있다.

 

🖍 UIKit의 코드 구조

UIKit은 앱과 시스템을 상호작용하게 해주고, 앱의 메인 이벤트루프를 실행하고, 콘텐츠를 싱행하는 앱의 주요 요소들을 제공해준다. 어떤 요소를 언제 수정하는 것이 앱을 구현하는 것이 중요하다.

 

UIKit앱의 구조는 기본적으로 Model-View-Controller(MVC)디자인 패턴을 따른다. Model은 앱데이터와 비즈니스 로직을 담고 있고, View는 데이터를 시각적으로 보여주고, Controller는 model과 View의 사이에서 다리의 역할을 하며 데이터를 적절한 타이밍에 옮겨주는 역할을 한다.

 

아래 이미지는 전형적인 UIKit앱의 구조를 나타낸다. Model 요소에는 앱의 데이터 구조의 표현을 제공한다. 필요에 따라서 데이터에 대한 사용자정의 view를 정의할 수 있지만, UIKit의 대부분의 View객체는 UIKit에서 제공해준다. 데이터 객체와 UIKit View간의 데이터교환은 View Controller와 Delegate 객체에 의해서 이루어진다.

UIKit과 Foundation 프레임워크는 앱의 Model을 정의할 수 있는 기본 타입들을 제공해준다. UIKit에서는 UIDocument객체를 제공해주는데, 이 객체는 디스크(disk)기반의 파일에 속해있는 데이터 구조들을 정리하는데 사용된다.
Foundation 프레임워크는 기본적인 객체들, 즉 문자열, 숫자, 배열등등 기본적인 데이터 타입을 정의한다. Swift Standard Libarary는 Foundation프레임워크와 동일한 타입을 많이 제공해준다.

UIKit은 앱의 controller와 view계층에서의 대부분의 객체를 제공해준다. 그리고 UIKit은 개발자의 콘텐츠를 화면에 보여주는 역할을 하는 UIView 클래스를 정의한다.또 UIApplication 객체는 main event loop에서 실행되도록 해주고, 앱의 전체적인 라이프 사이클을 관리해준다.