타겟 설정하기/ SceneDelegate의 등장/ scene window view

인생노잼시기·2021년 6월 15일
0

FLO-클론코딩

목록 보기
2/3

타겟 설정하기

"Target settings override project settings."

프로젝트에 있는 건 프로젝트 안의 모든 타겟에 적용되는 것이고
타겟에 있는 건 해당 타겟에만 적용된다.
타겟 세팅은 프로젝트 세팅을 오버라이드한다.
(프로젝트 세팅을 기반으로 타겟에서 변경해서 사용하면 되나보다)

지금까지 항상 Targets에 있는 부분의 버전을 Xcode 뒷자리와 맞추기만 했었는데...


iOS13부터 사용가능한 SceneDelegate의 등장

target을 10으로 바꿨더니 오류메시지가 떴다

'UIScene' is only available in iOS 13.0 or newer

AppDelegate는 앱의 주기를 다루는데,
iOS13 이상 이라면 UISceneDelegate 객체가 이벤트에 응답하고
미만이라면 UIApplicationDelegate객체가 이벤트에 응답한다.

iOS 13부터는 window의 개념이 scene으로 대체되고 아래의 그림처럼 하나의 앱에서 여러 개의 scene을 가질 수 있게 되었다. 즉, 하나의 앱을 동시에 켜는 것이 가능해졌다.

AppDelegate에 session life cycle이 추가되었다.

Scene과 SceneDelegate는 하나의 프로세스에 여러 개의 UI(Multiple Window)를 지원하기 위해서 만들어졌다

//SceneDelegate.swift
//@available을 사용해 클래스 전체가 사용되지 않아 window도 사용할 수 없게된다.
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    
//AppDelegate.swift
//var window: UIWindow? 를 추가해주고
//session life cycle에 @available을 붙여준다
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    
    // MARK: UISceneSession Lifecycle
    @available(iOS 13.0, *)
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    
    @available(iOS 13.0, *)
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }    

https://velog.io/@minni/iOS-Application-Life-Cycle
https://programmingwithswift.com/xcode-11-run-app-on-ios-12-and-lower/

실행순서

AppDelegate에 있는 액세스 포인트인 @main을 통해 클래스가 실행된 후
SceneDelegate가 실행된다.

scene window view 비교

  • UIScene은 app UI의 객체이며, window와 view controller(View)를 포함한다.

  • UIWindow는 app UI의 뒷 배경이라고 할 수 있고, view에 이벤트를 보내는 객체이다.

  • UIView는 화면에서 사각형 모양의 content를 관리하는 객체이다.

profile
인생노잼

0개의 댓글