개발을 시작하는 이야기

UIKit 본문

개발 이야기/Swift

UIKit

Teiresias 2022. 4. 5. 18:23

UIkit 역시 Foundation과 마찬가지로 Framework로 iOS와 tvOS에 들어가는 앱을 빌드하는데 필요한 핵심 오브젝트(core object)를 지원한다. 애플의 통합 개발 환경인 Xcode에서 프로젝트를 생성해서 개발을 시작하는데, Xcode는 UI 기반으로 앱을 빌드한다. UI의 요소가 오브젝트로써 가능하며 UIButton, UILabel, UITableView 등이 이에 속한다. 이런 오브젝트들의 인터렉션이나 콘텐츠 요소를 UIKit이 지원하는 방식이다.

 

대부분의 어플리케이션은 당연히 UIKit에 의존할 수밖에 없지만 제공하는 기능이 다양하고 커스텀이 가능하기 때문에 수없이 많은 사용자 경험을 제공할 수 있게 된다. 

필수 요소

UIKit이 사용된 어플리케이션은 다음 두 가지 요소를 필수적으로 가져야 한다.

애플리케이션 아이콘

말 그대로 앱스토어에서 어플을 다운로드할 때 보이는 아이콘이다. 홈 스크린, 세팅 화면, 알람 화면 등에 표시된다. 테스트 빌드 시에는 없어도 상관은 없지만 앱스토어에 등록할 때 필수적이라고 할 수 있다.

우리동네 문화유산의 Applcon 등록 화면

Assets에 Applcon을 통해 기기별로 보이는 아이콘의 크기를 설정할 수 있는데, 자세히보면 1x, 2x, 3x와 같이 포인트 단위로 나누어지는데, 보통 레티나 디스플레이(Retina Display)를 제공하는 디바이스는 2x 이상을 사용한다고 한다.

 

해상도는 1x에서 1point = 1px, 2x에서 1 point = 4px, 3x에서 1 point = 9px이다.

앱 아이콘을 해상도별로 일일이 작업할 필요 없이 해상도별로 뽑아주는 사이트가 있으니 편하게 사용하면 된다. 

https://appicon.co/

 

Launch Screen Storyboard

이 파일은 프로젝트를 생성하면 자동으로 함께 생성된다. 이름 그대로 어플리케이션이 시작될 때 보이는 화면을 말한다. 

LaunchScreen은 기본으로 생성된다.

LaunchScreen 또한 UI를 기반으로 만들 수 있다.

필수 앱 메타 데이터(Meta Data)

일반적으로 메타 데이터는 '데이터에 대한 데이터'를 의미한다. 네이티브 개발에서 메타 데이터는 '시스템에 대한 정보를 담은 데이터'라고 할 수 있다. 메타 데이터는 앱이 특정한 하드웨어를 사용할 때 허락을 구하거나 특정 상황에서 어떤 메시지를 보낼지에 대한 부분을 담당한다. 민감한 정보를 다루어야 할 때에도 사용될 수 있다. 단, 어떠한 기능에서 '허락'을 구하는 행위는 선택이 아니고 필수이다. 이 부분을 잘 되어있지 않으면 앱스토어 등록 심사를 가차 없이 거절당하는 만큼 애플이 강조하는 부분이다.

UIKit 어플리케이션의 코드 구조

출처 : Apple Document

UIKit은 앱의 메인 이벤트 루프(Main Event Loop)를 실행하고 화면에 콘텐츠를 표시하며 여러 오브젝트를 제공한다. 그렇기에 앱의 구조가 어떻게 동작하는지 알아야 재사용 가능하고 지속적인 코드를 작성할 수 있다. 공식문서의 UIKit 앱의 구조는 MVC 디자인 패턴을 기반으로 한다.

 

UIKit을 Jump to definition 하게 되면 아래와 같은 리스트를 볼 수 있다.

더보기
import Accessibility
import CoreGraphics
import DataDetection
import Dispatch
import Foundation
import UIKit.DocumentManager
import UIKit.NSAttributedString
import UIKit.NSDataAsset
import UIKit.NSDiffableDataSourceSectionSnapshot
import UIKit.NSFileProviderExtension
import UIKit.NSIndexPath_UIKitAdditions
import UIKit.NSItemProvider_UIKitAdditions
import UIKit.NSLayoutAnchor
import UIKit.NSLayoutConstraint
import UIKit.NSLayoutManager
import UIKit.NSParagraphStyle
import UIKit.NSShadow
import UIKit.NSStringDrawing
import UIKit.NSText
import UIKit.NSTextAttachment
import UIKit.NSTextContainer
import UIKit.NSTextContentManager
import UIKit.NSTextElement
import UIKit.NSTextLayoutFragment
import UIKit.NSTextLayoutManager
import UIKit.NSTextLineFragment
import UIKit.NSTextRange
import UIKit.NSTextSelection
import UIKit.NSTextSelectionNavigation
import UIKit.NSTextStorage
import UIKit.NSTextViewportLayoutController
import UIKit.NSToolbar_UIKitAdditions
import UIKit.NSTouchBar_UIKitAdditions
import UIKit.NSUserActivity_NSItemProvider
import UIKit.ShareSheet
import UIKit.UIAccelerometer
import UIKit.UIAccessibility
import UIKit.UIAccessibilityAdditions
import UIKit.UIAccessibilityConstants
import UIKit.UIAccessibilityContainer
import UIKit.UIAccessibilityContentSizeCategoryImageAdjusting
import UIKit.UIAccessibilityCustomAction
import UIKit.UIAccessibilityCustomRotor
import UIKit.UIAccessibilityElement
import UIKit.UIAccessibilityIdentification
import UIKit.UIAccessibilityLocationDescriptor
import UIKit.UIAccessibilityZoom
import UIKit.UIAction
import UIKit.UIActionSheet
import UIKit.UIActivity
import UIKit.UIActivityIndicatorView
import UIKit.UIActivityItemProvider
import UIKit.UIActivityItemsConfiguration
import UIKit.UIActivityItemsConfigurationReading
import UIKit.UIActivityViewController
import UIKit.UIAlert
import UIKit.UIAlertController
import UIKit.UIAlertView
import UIKit.UIAppearance
import UIKit.UIApplication
import UIKit.UIApplicationShortcutItem
import UIKit.UIAttachmentBehavior
import UIKit.UIBackgroundConfiguration
import UIKit.UIBandSelectionInteraction
import UIKit.UIBarAppearance
import UIKit.UIBarButtonItem
import UIKit.UIBarButtonItemAppearance
import UIKit.UIBarButtonItemGroup
import UIKit.UIBarCommon
import UIKit.UIBarItem
import UIKit.UIBehavioralStyle
import UIKit.UIBezierPath
import UIKit.UIBlurEffect
import UIKit.UIButton
import UIKit.UIButtonConfiguration
import UIKit.UICellAccessory
import UIKit.UICellConfigurationState
import UIKit.UICloudSharingController
import UIKit.UICollectionLayoutList
import UIKit.UICollectionView
import UIKit.UICollectionViewCell
import UIKit.UICollectionViewCompositionalLayout
import UIKit.UICollectionViewController
import UIKit.UICollectionViewFlowLayout
import UIKit.UICollectionViewItemRegistration
import UIKit.UICollectionViewLayout
import UIKit.UICollectionViewListCell
import UIKit.UICollectionViewTransitionLayout
import UIKit.UICollectionViewUpdateItem
import UIKit.UICollisionBehavior
import UIKit.UIColor
import UIKit.UIColorPickerViewController
import UIKit.UIColorWell
import UIKit.UICommand
import UIKit.UIConfigurationColorTransformer
import UIKit.UIConfigurationState
import UIKit.UIContentConfiguration
import UIKit.UIContentSizeCategory
import UIKit.UIContentSizeCategoryAdjusting
import UIKit.UIContextMenuConfiguration
import UIKit.UIContextMenuInteraction
import UIKit.UIContextualAction
import UIKit.UIControl
import UIKit.UIDataDetectors
import UIKit.UIDataSourceTranslating
import UIKit.UIDatePicker
import UIKit.UIDeferredMenuElement
import UIKit.UIDevice
import UIKit.UIDiffableDataSource
import UIKit.UIDocument
import UIKit.UIDocumentBrowserAction
import UIKit.UIDocumentBrowserViewController
import UIKit.UIDocumentInteractionController
import UIKit.UIDocumentMenuViewController
import UIKit.UIDocumentPickerExtensionViewController
import UIKit.UIDocumentPickerViewController
import UIKit.UIDragInteraction
import UIKit.UIDragItem
import UIKit.UIDragPreview
import UIKit.UIDragPreviewParameters
import UIKit.UIDragSession
import UIKit.UIDropInteraction
import UIKit.UIDynamicAnimator
import UIKit.UIDynamicBehavior
import UIKit.UIDynamicItemBehavior
import UIKit.UIEvent
import UIKit.UIEventAttribution
import UIKit.UIEventAttributionView
import UIKit.UIFeedbackGenerator
import UIKit.UIFieldBehavior
import UIKit.UIFocus
import UIKit.UIFocusAnimationCoordinator
import UIKit.UIFocusDebugger
import UIKit.UIFocusEffect
import UIKit.UIFocusGuide
import UIKit.UIFocusMovementHint
import UIKit.UIFocusSystem
import UIKit.UIFont
import UIKit.UIFontDescriptor
import UIKit.UIFontMetrics
import UIKit.UIFontPickerViewController
import UIKit.UIFontPickerViewControllerConfiguration
import UIKit.UIFoundation
import UIKit.UIGeometry
import UIKit.UIGestureRecognizer
import UIKit.UIGestureRecognizerSubclass
import UIKit.UIGraphics
import UIKit.UIGraphicsImageRenderer
import UIKit.UIGraphicsPDFRenderer
import UIKit.UIGraphicsRenderer
import UIKit.UIGraphicsRendererSubclass
import UIKit.UIGravityBehavior
import UIKit.UIGuidedAccess
import UIKit.UIGuidedAccessRestrictions
import UIKit.UIHoverGestureRecognizer
import UIKit.UIImage
import UIKit.UIImageAsset
import UIKit.UIImageConfiguration
import UIKit.UIImagePickerController
import UIKit.UIImageSymbolConfiguration
import UIKit.UIImageView
import UIKit.UIImpactFeedbackGenerator
import UIKit.UIIndirectScribbleInteraction
import UIKit.UIInputView
import UIKit.UIInputViewController
import UIKit.UIInteraction
import UIKit.UIInterface
import UIKit.UIKey
import UIKit.UIKeyCommand
import UIKit.UIKeyConstants
import UIKit.UIKeyboardLayoutGuide
import UIKit.UIKitCore
import UIKit.UIKitDefines
import UIKit.UILabel
import UIKit.UILargeContentViewer
import UIKit.UILayoutGuide
import UIKit.UILexicon
import UIKit.UIListContentConfiguration
import UIKit.UIListContentImageProperties
import UIKit.UIListContentTextProperties
import UIKit.UIListSeparatorConfiguration
import UIKit.UILocalNotification
import UIKit.UILocalizedIndexedCollation
import UIKit.UILongPressGestureRecognizer
import UIKit.UIManagedDocument
import UIKit.UIMenu
import UIKit.UIMenuBuilder
import UIKit.UIMenuController
import UIKit.UIMenuElement
import UIKit.UIMenuSystem
import UIKit.UIMotionEffect
import UIKit.UINavigationBar
import UIKit.UINavigationBarAppearance
import UIKit.UINavigationController
import UIKit.UINavigationItem
import UIKit.UINib
import UIKit.UINibDeclarations
import UIKit.UINibLoading
import UIKit.UINotificationFeedbackGenerator
import UIKit.UIOpenURLContext
import UIKit.UIPageControl
import UIKit.UIPageViewController
import UIKit.UIPanGestureRecognizer
import UIKit.UIPasteConfiguration
import UIKit.UIPasteConfigurationSupporting
import UIKit.UIPasteboard
import UIKit.UIPencilInteraction
import UIKit.UIPickerView
import UIKit.UIPinchGestureRecognizer
import UIKit.UIPointerAccessory
import UIKit.UIPointerInteraction
import UIKit.UIPointerLockState
import UIKit.UIPointerRegion
import UIKit.UIPointerStyle
import UIKit.UIPopoverBackgroundView
import UIKit.UIPopoverController
import UIKit.UIPopoverPresentationController
import UIKit.UIPopoverSupport
import UIKit.UIPresentationController
import UIKit.UIPress
import UIKit.UIPressesEvent
import UIKit.UIPreviewInteraction
import UIKit.UIPreviewParameters
import UIKit.UIPrintError
import UIKit.UIPrintFormatter
import UIKit.UIPrintInfo
import UIKit.UIPrintInteractionController
import UIKit.UIPrintPageRenderer
import UIKit.UIPrintPaper
import UIKit.UIPrintServiceExtension
import UIKit.UIPrinter
import UIKit.UIPrinterPickerController
import UIKit.UIProgressView
import UIKit.UIPushBehavior
import UIKit.UIReferenceLibraryViewController
import UIKit.UIRefreshControl
import UIKit.UIRegion
import UIKit.UIResponder
import UIKit.UIResponder_UIActivityItemsConfiguration
import UIKit.UIRotationGestureRecognizer
import UIKit.UIScene
import UIKit.UISceneActivationConditions
import UIKit.UISceneDefinitions
import UIKit.UISceneEnhancedStateRestoration
import UIKit.UISceneOptions
import UIKit.UISceneSession
import UIKit.UIScreen
import UIKit.UIScreenEdgePanGestureRecognizer
import UIKit.UIScreenMode
import UIKit.UIScreenshotService
import UIKit.UIScribbleInteraction
import UIKit.UIScrollView
import UIKit.UISearchBar
import UIKit.UISearchContainerViewController
import UIKit.UISearchController
import UIKit.UISearchDisplayController
import UIKit.UISearchSuggestion
import UIKit.UISearchTextField
import UIKit.UISegmentedControl
import UIKit.UISelectionFeedbackGenerator
import UIKit.UISheetPresentationController
import UIKit.UISlider
import UIKit.UISnapBehavior
import UIKit.UISplitViewController
import UIKit.UISpringLoadedInteraction
import UIKit.UISpringLoadedInteractionSupporting
import UIKit.UIStackView
import UIKit.UIStateRestoration
import UIKit.UIStatusBarManager
import UIKit.UIStepper
import UIKit.UIStoryboard
import UIKit.UIStoryboardPopoverSegue
import UIKit.UIStoryboardSegue
import UIKit.UIStringDrawing
import UIKit.UISwipeActionsConfiguration
import UIKit.UISwipeGestureRecognizer
import UIKit.UISwitch
import UIKit.UITabBar
import UIKit.UITabBarAppearance
import UIKit.UITabBarController
import UIKit.UITabBarItem
import UIKit.UITableView
import UIKit.UITableViewCell
import UIKit.UITableViewController
import UIKit.UITableViewHeaderFooterView
import UIKit.UITapGestureRecognizer
import UIKit.UITargetedDragPreview
import UIKit.UITargetedPreview
import UIKit.UITextChecker
import UIKit.UITextDragPreviewRenderer
import UIKit.UITextDragURLPreviews
import UIKit.UITextDragging
import UIKit.UITextDropProposal
import UIKit.UITextDropping
import UIKit.UITextField
import UIKit.UITextFormattingCoordinator
import UIKit.UITextInput
import UIKit.UITextInputTraits
import UIKit.UITextInteraction
import UIKit.UITextItemInteraction
import UIKit.UITextPasteConfigurationSupporting
import UIKit.UITextPasteDelegate
import UIKit.UITextView
import UIKit.UITimingCurveProvider
import UIKit.UITimingParameters
import UIKit.UIToolTipInteraction
import UIKit.UIToolbar
import UIKit.UIToolbarAppearance
import UIKit.UITouch
import UIKit.UITrackingLayoutGuide
import UIKit.UITraitCollection
import UIKit.UIUserActivity
import UIKit.UIUserNotificationSettings
import UIKit.UIVibrancyEffect
import UIKit.UIVideoEditorController
import UIKit.UIView
import UIKit.UIViewAnimating
import UIKit.UIViewConfigurationState
import UIKit.UIViewController
import UIKit.UIViewControllerTransitionCoordinator
import UIKit.UIViewControllerTransitioning
import UIKit.UIViewPropertyAnimator
import UIKit.UIVisualEffect
import UIKit.UIVisualEffectView
import UIKit.UIWebView
import UIKit.UIWindow
import UIKit.UIWindowScene
import UIKit.UIWindowSceneActivationAction
import UIKit.UIWindowSceneActivationConfiguration
import UIKit.UIWindowSceneActivationInteraction
import UIKit.UIWindowSceneActivationRequestOptions
import UIKit.UNNotificationResponse_UIKitAdditions
import _Concurrency

UIKit을 import 하는 대신 UIKit.UITableView처럼 사용하는 특정 부분만 import 해서 사용할 수 있다.

 

UIKit에 대해서 알아보았고 다음은 드디어 SwiftUI에 대해서 적어보도록 하겠다.

 

참고자료

about_app_development_with_uikit#overview

'개발 이야기 > Swift' 카테고리의 다른 글

[SwiftUI] Lecture 2: Learning more about SwiftUI  (0) 2022.04.10
[SwiftUI] Lecture 1: Getting started with SwiftUI  (0) 2022.04.08
Foundation  (0) 2022.04.04
[SwiftUI] SwiftUI란?  (0) 2022.04.03
Get과 Post의 차이점  (0) 2022.04.01