TIL
🌱 난 오늘 무엇을 공부했을까?
📌 면접스터디
📍 iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가?
- UIKit
- UI 구현을 위한 window 및 view architecture
- Multi-Touch 및 기타 유형의 사용자 입력을 앱에 전달하기 위한 이벤트 처리 인프라를 제공
- 사용자, 시스템 및 앱 간의 상호 작용을 관리하기 위한 기본 실행 루프를 제공
📍 Cocoa 프레임워크 계층
-
Cocoa Touch 계층
- 하위 계층의 프레임워크를 사용하여 애플리케이션을 직접 구현하는 프레임워크.
- UIKit, GameKit, MapKit
-
Media 계층
- 상위 계층인 코코아 터치 계층에 그래픽 관련 서비스나 멀티미디어 관련 서비스를 제공
- Core Graphics, Core Text, Core Audio, Core Animation, AVFoundation
-
Core Service 계층
- 문자열 처리, 데이터 집합 관리, 네트워크, 주소록 관리, 환경 설정 등 핵심적인 서비스들을 제공. 또한 GPS, 나침반, 가속도 센서나 자이로스코프 센서와 같이 디바이스의 하드웨어 특성에 기반한 서비스도 제공.
- Foundation, Core Foundation, Core Location, Core Motion, Core Animation, Core Data
-
Core OS 계층
- 커널, 파일 시스템, 네트워크, 보안, 전원 관리, 디바이스 드라이버 등이 포함
- iOS가 운영 체제로서 기능을 하기 위한 핵심적인 영역
📍 Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하시오.
- Foundation 프레임워크는 데이터 저장 및 관리, 텍스트 처리, 날짜 및 시간 계산, 정렬 및 필터링, 네트워킹을 포함하여 앱 및 프레임워크를 위한 기본 기능 레이어를 제공하는 Swift의 기본 프레임워크
- Cocoa 전체에서 사용되는 기본 유형 포함.
- 앱 구성에 도움을 주는 Task 관리, 리소스, 에러와 예외처리 같은 라이브러리를 포함.
- 내부 저장소, iCloud 같은 데이터 관리 라이브러리 포함.
- 네트워킹 라이브러리 포함.
- 기본적인 Objective-C, 내부 프로세스, 스레드 처리를 위한 동시성 라이브러리 포함.
📍 UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가?
- main thread
- UIKit은 main thread를 통해 App의 런루프와 이벤트, UI처리 루프를 모두 처리한다.
- main thread가 아닌 Backgroud thread에서 UI 이벤트를 비동기로 처리하게 되면 UI rendering이 thread 마다 일어나기 때문에 굉장한 부하를 줄 수 있다. (UI rendering는 부하가 큰 작업이다.)
📍 App Bundle의 구조와 역할에 대해 설명하시오.
- App Bundle은 코드와 리소스를 캡슐화하는 데 사용되는 macOS 및 iOS의 기본 기술
- 실행 가능한 프로세스와 관련된 코드 및 리소스를 하나의 파일에서 관리할 수 있다.
- 일반적인 iOS 애플리케이션 번들은 애플리케이션 실행 파일과 애플리케이션이 사용하는 모든 리소스(예: 애플리케이션 아이콘, 기타 이미지 및 현지화된 콘텐츠)를 최상위 번들 디렉토리에 포함
- 애플리케이션 코드가 포함된 실행 파일
- Application icons
- Info.plist
- 번들 ID, 버전 번호 및 표시 이름과 같은 애플리케이션에 대한 구성 정보
- Launch images
- MainWindow.nib
- 애플리케이션 시작 시 로드할 기본 인터페이스 객체
- Settings.bundle
- 기본 설정을 구성하고 표시하기 위한 속성 목록 및 기타 리소스 파일
- Custom resource files
- nib 파일, 이미지, 사운드 파일, 구성 파일, 문자열 파일 및 애플리케이션에 필요한 기타 사용자 정의 데이터 파일
🔗 번들의 장점
- 번들은 파일 시스템의 디렉토리 계층이기 때문에 번들은 파일만 포함, 동일한 파일 기반 인터페이스를 모두 사용하여 다른 유형의 파일을 열 때와 마찬가지로 번들 리소스를 열 수 있다.
- 번들 디렉토리 구조를 통해 localizations를 쉽게 지원할 수 있다. localization된 리소스 관리가 쉽다
- 번들은 HFS, HFS+ 및 AFP와 같은 여러 포크 형식과 UFS, SMB 및 NFS와 같은 단일 포크 형식을 포함하여 다양한 형식의 볼륨에 상주할 수 있다.
- 사용자는 Finder에서 간단히 번들을 드래그하여 설치, 재배치 및 제거할 수 있다.
- 패키지이기도 하므로 불투명한 파일로 취급되는 번들은
중요한 리소스의 제거, 수정 또는 이름 변경과 같은 우발적인 사용자 수정에 덜 취약
.
여러 칩 아키텍처(PowerPC, Intel) 및 다양한 주소 공간 요구 사항(32비트/64비트)을 지원
할 수 있습니다. 또한 특수 실행 파일(예: 특정 벡터 명령어 세트에 최적화된 라이브러리)의 포함을 지원할 수 있습니다.
- 대부분의(전부는 아님) 실행 가능한 코드를 번들로 묶을 수 있다. 애플리케이션, 프레임워크(공유 라이브러리) 및 플러그인은 모두 번들 모델을 지원.
정적 라이브러리, 동적 라이브러리, 셸 스크립트 및 UNIX 명령줄 도구는 번들 구조를 사용하지 않는다.
- 번들 애플리케이션은 서버에서 직접 실행할 수 있다. 로컬 시스템에 특별한 공유 라이브러리, 확장 및 리소스를 설치할 필요가 없다.
https://developer.apple.com/documentation/foundation?language=objc
https://developer.apple.com/documentation/uikit?language=objc
https://velog.io/@wan088/iOS-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-CocoaTouch-Foundation-UIkit-sjjzdqmte4
https://developer.apple.com/app-store/app-bundles/
https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1