iOS 계층구조
1. Cocoa Touch Framework
- 앱을 제작하기 위한 도구 모음 (화면 이벤트, UI 기능 포함)
- 개발자의 역할
- UIKit Framework
: 유저 인터페이스 도구를 통해 iOS 앱을 구현할 수 있는 방법 제공
- Foundation Framework
: 기본 데이터 형식, 컬렉션, 앱의 기본 객체, 기반 기술 제공
파일 및 데이터 관리, 네트워킹 시스템 포함
- 카메라, 영상, 음악 (아이폰의 발전)
- 멀티미디어 서비스 제공. 음악, 비디오 찾고 재생할 때 사용
3. Core Service
- 센서(중력가속도, 조도, 자이로스코프 등등), 나침반, GPS 등
기기 자체의 움직임이나 하드웨어 특성에 기반한 서비스 제공
4. Core OS
- C 기반 저수준 API, 하드웨어와 가까이 있는 최하위 계층
- 배터리, 홈버튼 등 물리적인 것들
UIKit Framework
UIViewController
Content View Controller
- 모든 뷰를 단독으로 관리한다
- UIViewController, UITableController, UICollectionViewController
Container View Controller
- 자체 뷰 + 자식 뷰 컨트롤러를 갖는 루트 뷰를 관리한다
- UINavigationController, UITabbarController, UIPageViewController
- UINavigationController
- View Controller들을 계층구조로 탐색할 수 있게 해주는 컨트롤러
- 수직적 형태의 계층 구조를 띈다
- RootViewController가 존재해야 한다
- 화면 전환 시 Push-Pop 구조
- NavigationController나 TabbarController를 스토리보드 상에서 연결할 때,
반드시 Relationship Segue에서 연결해주어야 한다
Other Controller
- UIAlertController
- UIImagePickerController (사진)
- UIActivityViewController (에어드롭)
- UIMenuController (복사 메뉴)
- UIDocumentPickerViewController (파일 앱)
- UIFontPickerViewController (서체 선택)
- UIColorePickerViewController (색상)
UIView
- View Controller 위에 뷰 객체가 쌓이는 형태
- UILabel, UITextField, UITextView, UIImageView
Info
- Appearance
- Light라고 적는다 -> 다크모드를 사용하지 않는다
- Storyboard Name
- 앱 빌드하고 처음에 나타나야 하는 화면의 스토리보드 파일명을 적어준다
Scene & Logic
- View Controller 추가
- Logic 파일 생성
- 파일 생성 단축키 : command + n
- 상속받을 슈퍼클래스 지정 : UIViewController, UITableViewController, ...
- Group에는 폴더가 있어야 함
- 연결
- Custom Class의 Class에 새로 만든 Logic 파일 치고 엔터
Inherit Module From Target
체크
- 뚝딱뚝딱
- @IBOutlet
- @IBAction
- 연결 관련 에러가 발생할 때는 connection inspector 영역을 확인한다
- 노란색 세모 표시(경고)를 지우고, 빈 동그라미(연결 x)를 스토리 보드 상에 알맞은 객체와 연결한다
- 스토리보드랑 코드 연결하고 난 후에 변수 이름같은거 바꾸면 이런 에러 발생
- 먼저 코드로 적고, 객체와 연결하는 것도 가능하다
앱의 생명주기
상태
- NOT Running
- Foreground
a. Active : 앱이 화면에서 실행중인 상태
b. Inactive : 앱이 화면에서 실행중이나 어떤 신호도 받지 않는 상태
- 갑자기 전화가 왔다거나, 알람이 울린다거나
그럼 PIP 모드나 전화 알림창이 위에만 떠있을 때는 어떤 상태일까?
- Background
- 앱이 화면에 보이지는 않지만, 코드를 실행하고 있는 상태
- 멜론으로 노래를 듣고 있거나, 유튜브 프리미엄으로 영상 보는 중
- Suspend
- 곧 종료될 상태
- 언제 NOT Running 상태로 돌아가는지는 알 수 없다
AppDelegate
Process Lifecycle (App Launched / App Terminated)
- iOS 12까지는 AppDelegate.swift 에서 앱의 생명주기를 모두 관리
- iOS 13에서 iPadOS가 등장했고, iPad의 멀티 윈도우 기능 등장하면서, 이를 관리해줄 객체 필요 - SceneDelgate
SceneDelgate
UI Lifecycle (Enter Foreground / Became Active)
- Scene이 새롭게 생성되고 종료되는 트리거를 AppDelegate에게 알려줌으로써
AppDelegate가 앱의 생성/종료 시점 통제
- 만약 iOS 최소버전을 13 미만으로 내리고 앱을 실행시키려고 하면,
여기저기서 각종 에러가 발생 - iOS 13 이후부터 SceneDelegate가 작동하기 때문
- 에러나는 함수와 클래스에다가
@available
키워드를 붙여주자