ios 13.0 버전 업데이트가 되면서 iPad OS가 등장하게 되었다.
아이패드에서는 두 개의 앱을 동시에 실행할 수 있게 되면서 앱의 생명주기 관리 방식에 변화가 생겼다.
앱의 실행부터 종료, 백그라운드 상태까지 앱의 상태가 전환되는 과정을 말한다.
Not Running
앱이 시작되기 전 상태 (아직 켜지 않음)
ForeGround
Active
Inactive
BackGround
Suspend
13 업데이트 이전에는 AppDelegate에서 앱의 생명주기와 UI 라이프사이클 모두 관리했다.
iOS 13.0버전으로 업데이트 되면서 iPad OS에서는 멀티 윈도우 기능이 등장했고, ForeGround에서 두 가지의 앱을 실행할 수 있게 되었다.
-> UI 라이프사이클이 다양해지면서 관리해 줄 객체가 필요해졌고, SceneDelegate가 도입되었다.
AppDelegate
SceneDelegate
-> AppDelegate에서 생명주기를 관리했었단 흔적(?)
-> SceneDelgate에서 생명주기를 다루는 함수들
ex) 영화를 다운받는 중에 앱을 나간다
13.0 이후 생겨난 옵션들을 사용할 때 최소 버전이 13.0이하인 환경에서도 작동되게 하려면 어떻게 해야할까?
@available(iOS 13.0, *)
@available을 사용하여 어떤 버전부터 가능하도록 할 것인지 지정하자
13.0부터 사용할 것이고, 13.0 이상의 버전 모두 사용 가능하도록!
-> SeneDelegate.swift
sceneDelegate는 전부 13.0 버전부터 생겼기 때문에 클래스 전체에 available을 붙여준다.
-> AppDelegate.swift
하단 두개의 함수에 적용시켜준다.
함수나 클래스 또는 프로토콜 앞에 선언한다.
컴파일 타임에 경고 또는 오류를 알려준다!
@available은 os버전 또는 플랫폼에 따라 제한할 수 있다.
@available(iOS 13.0, macOS 10.12, *)
지정된 플랫폼에서 사용할 수 없음을 나타낼때
@available(macOS, unavailable, message: "사용불가")
-> macOS에서는 해당 메서드를 사용할 수 없다!
unavailable은 해당 버전에 사용할 수 없도록 할 때 unavailable을 사용함으로써 함수를 선언하기 전 컴파일 시 오류를 내어 안전한 코드작성을 할 수 있다고 한다.
DatePickerView의 스타일 중 inline타입은 14.0 버전 이후부터 생긴 스타일이다.
때문에, 14.0 버전 이하에서는 해당 스타일을 적용할 수가 없다.
그렇다면 스타일 적용할 때 조건문으로 OS버전을 확인한 후 사용하도록 구현해보자
if #available(iOS 14.0, *){
datePicker.preferredDatePickerStyle = .inline
}
#available은 구문에서 버전을 확인하는 용도로 사용된다.
if문 또는 guard문과 같이 사용된다.
정보 감사합니다.