iOS 13 이후의 앱의 라이프 사이클 & available

journey📸·2023년 7월 23일
0

iOS STUDY

목록 보기
2/3

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문과 같이 사용된다.

profile
https://iwntberich.tistory.com/

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

정보 감사합니다.

답글 달기