[iOS] Xcode의 타겟 iOS13미만 버전 지원하기

수킴·2021년 8월 24일
0

느린우체통

목록 보기
6/6

안녕하세요

Xcode에서 프로젝트를 새로 생성한 후 DeploymentTarget을 iOS13이하로 설정한다면 iOS12까지는 대부분 하나의 앱에 하나의 window였지만 iOS 13부터는 window의 개념이 scene으로 대체되면서 scene을 사용하기 때문에 따로 설정을 해줘야합니다. 이러한 설정을 어떻게 해야 하는지에 대해서 알아보겠습니다.

iOS Deployment Target이란?

지원하는 최소 OS지원 버전이라고 생각할 수 있습니다.
DepolymentTarget은 PROJECT와 TARGETS 각각 설정이 가능합니다.
TARGETS가 PROJECT를 OVERRIDE를 하고 두 버전이 다르다면 TARGETS를 기준으로 최소버전이 설정됩니다.

첫번째 방법 : Scene관련부분들을 모두 삭제하는 방법

  1. SceneDelegate.swift 파일을 삭제합니다.
  2. AppDelegate의 UISceneSession Lifecycle관련 함수를 삭제합니다.
  3. AppDelegate의 아래 코드를 추가합니다.
    var window: UIWindow?
  4. info.plist의 ApplicationSceneManifest항목을 삭제합니다.

두번째 방법 : iOS13미만과 이상인 경우 분기처리하는 방법

@available

프로젝트 첫 생성시 Xcode는 앱의 최소 버전을 13버전 이상으로 셋팅합니다.

최소 버전을 12 이하로 설정하려면 몇가지를 수정해줘야 합니다.

  1. SceneDelegate.swift
    SceneDelegate는 iOS 13 이후 버전에 서 필요하므로 availability attributes인 @available을 SceneDelegate 클래스에 추가해줍니다.
       @available(iOS 13.0, *)
       class SceneDelegate: UIResponder, UIWindowSceneDelegate {
         ...
       }
  1. AppDelegate.swift
    AppDelegate에 선언되어 있는 메서드 중 두개의 메서든 SceneSession을 관리하는 메서드이므로 마찬가지로 각각 @available 를 추가해줍니다.
       // MARK: UISceneSession Lifecycle
       @available(iOS 13.0, *)
       func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
         ...
       }
       
       @available(iOS 13.0, *)
       func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
         ...
       }
  1. UIWindow
    마지막으로 SceneDelegate에서 Scene을 관리하기 위하여 선언해주었던 UIWindow 변수를 Window 관리를 위하여 AppDelegate에 선언해줍니다.
       class AppDelegate: UIResponder, UIApplicationDelegate {
       	var window: UIWindow?
       }

참고링크

profile
iOS 공부 중 🧑🏻‍💻

0개의 댓글