iOS 13.0 버전
ios 13.0 버전 업데이트가 되면서 iPad OS가 등장하게 되었다.
아이패드에서는 두 개의 앱을 동시에 실행할 수 있게 되면서 앱의 생명주기 관리 방식에 변화가 생겼다.
앱의 생명주기(Life Cycle)
생명주기란?
앱의 실행부터 종료, 백그라운드 상태까지 앱의 상태가 전환되는 과정을 말한다.
Not Running
앱이 시작되기 전 상태 (아직 켜지 않음)
ForeGround
Active
- 앱이 화면에서 실행 중인 상태
- 하나의 앱만 Active상태로 유지할 수 있음(아직 아이폰에서 두가지 앱을 동시에 실행할 수 없으니까!)
Inactive
- 앱이 화면에서 실행 중이나 어떤 신호도 받지 않는 상태 (비활성화 상태)
- 앱 사용중 전화오거나 알람 울릴 때..
BackGround
- 앱이 화면에 보이지 않지만 실행하고 있는 상태
- 유튜브 프리미엄 백그라운드 재생, 음악 스트리밍 어플
Suspend
- 앱이 곧 종료 될 상태
13 업데이트 이전에는 AppDelegate에서 앱의 생명주기와 UI 라이프사이클 모두 관리했다.
iOS 13.0버전으로 업데이트 되면서 iPad OS에서는 멀티 윈도우 기능이 등장했고, ForeGround에서 두 가지의 앱을 실행할 수 있게 되었다.
-> UI 라이프사이클이 다양해지면서 관리해 줄 객체가 필요해졌고, SceneDelegate가 도입되었다.
13 이후 AppDelegate와 SceneDelegate
AppDelegate
- 앱 프로세스 상태 관리 (앱이 런치 되는지, 종료 되는지)
SceneDelegate
- 백그라운드와 포그라운드 등의 UI 라이프 사이클 관리
- SceneDelegate에서 Scene이 생성되고 종료되는 트리거를 AppDelegate에 알려줌으로써, AppDelegate가 앱의 생성과 종료 시점을 통제할 수 있게 되었다.
-> AppDelegate에서 생명주기를 관리했었단 흔적(?)
-> SceneDelgate에서 생명주기를 다루는 함수들
- sceneDidBecomeActive -> 팝업창, 잠금화면
- sceneDidEnterBackground -> 영상, 음악 어플에서 주로 사용
ex) 영화를 다운받는 중에 앱을 나간다
- 영화를 계속해서 다운받으려면? -> background 부분을 작성해줘야한다..
편하게 사용하는 어플이면 생명주기 부분을 열심히 설정한 것..!
ios 13.0 이하에서 앱이 실행되도록 하려면?
13.0 이후 생겨난 옵션들을 사용할 때 최소 버전이 13.0이하인 환경에서도 작동되게 하려면 어떻게 해야할까?
@available(iOS 13.0, *)
@available을 사용하여 어떤 버전부터 가능하도록 할 것인지 지정하자
13.0부터 사용할 것이고, 13.0 이상의 버전 모두 사용 가능하도록!
-> SeneDelegate.swift
sceneDelegate는 전부 13.0 버전부터 생겼기 때문에 클래스 전체에 available을 붙여준다.
-> AppDelegate.swift
하단 두개의 함수에 적용시켜준다.
@available
함수나 클래스 또는 프로토콜 앞에 선언한다.
컴파일 타임에 경고 또는 오류를 알려준다!
@available은 os버전 또는 플랫폼에 따라 제한할 수 있다.
@available(iOS 13.0, macOS 10.12, *)
unavailable
지정된 플랫폼에서 사용할 수 없음을 나타낼때
@available(macOS, unavailable, message: "사용불가")
-> macOS에서는 해당 메서드를 사용할 수 없다!
unavailable은 해당 버전에 사용할 수 없도록 할 때 unavailable을 사용함으로써 함수를 선언하기 전 컴파일 시 오류를 내어 안전한 코드작성을 할 수 있다고 한다.
조건문에서 available 사용하기(#available)
DatePickerView의 스타일 중 inline타입은 14.0 버전 이후부터 생긴 스타일이다.
때문에, 14.0 버전 이하에서는 해당 스타일을 적용할 수가 없다.
그렇다면 스타일 적용할 때 조건문으로 OS버전을 확인한 후 사용하도록 구현해보자
if #available(iOS 14.0, *){
datePicker.preferredDatePickerStyle = .inline
}
#available은 구문에서 버전을 확인하는 용도로 사용된다.
if문 또는 guard문과 같이 사용된다.
'iOS > 💻 iOS Study' 카테고리의 다른 글
[Swift] DI 의존성 주입 (1) | 2023.12.19 |
---|---|
View의 Drawing Cycle (0) | 2023.11.11 |
[iOS/Swift] MapKit - 위치 권한 설정을 구현해보자! (0) | 2023.10.01 |
UserDefaults와 Sandbox System (0) | 2023.08.02 |
Navigation Bar - iOS 버전에 따른 차이 (0) | 2023.07.30 |