Tunko Development Diary

[iOS14][SwfitUI] SwiftUI2 life cycle 에서 딥링크 처리 본문

Development/iOS 개발

[iOS14][SwfitUI] SwiftUI2 life cycle 에서 딥링크 처리

Tunko 2021. 2. 14. 13:21

기존 Appdelegate를 사용할 땐 application(_:open:options:) 메서드를 통하여 URL를 라우팅해야 했지만 완전 다른 방식으로 바뀌었습니다.

import SwiftUI

@main
struct TestApp: App {
    @Environment(\.scenePhase) var scenePhase

    var body: some Scene { 
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    print("Received URL: \(url)")
                }
           } 
       }
    }
}

위 코드를 보면 앱에 최상위 Scene에 url을 수신 할 수 있습니다.

변경된 방식의 장점은 앱 전체에 여러 url 핸들링을 적용할 수 있습니다.
즉 각 화면에서 필요한 딥링크를 개별적으로 선별해 화면별로 적용 할 수 있게 됩니다.
통합 관리하던 방식보다 필요한 화면에서 필요한 딥링크정보를 받아 처리할 수 있게 됩니다.

그럼 한번 해보자!

우선 화면별로 받을 수 있도록 SampleView1 이라는 SwiftUI View 를 생성했습니다.

var body: some Scene { 
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    if "\(url)".contains("ContentView") {
                        print("SempleView1 Received URL: \(url)")
                    }
                }
            SempleView1()
                .onOpenURL { url in
                    if "\(url)".contains("SempleView1") {
                        print("SempleView1 Received URL: \(url)")
                    }
                }
              } 
        }
    }
  1. 예제 프로젝트에 URL Schemes을 설정해줍니다.
  2. 앱을 시뮬레이터로 실행시킵니다.
  3. 터미널을 실행합니다.
  4. xcrun simctl openurl booted tunkotest://ContentView

  5. xcode에서 콘솔 로그를 확인
  6. ContentView Received URL: tunkotest://ContentView 출력을 확인 할 수 있습니다.
  7. xcrun simctl openurl booted tunkotest://SempleView1

  8. SempleView1 Received URL: tunkotest://SempleView1 출력을 확인 할 수 있습니다.

이상 iOS14에서 적용된 SwiftUI life cycle에서의 딥링크 처리 방법에 대해 정리해보았습니다.

반응형
Comments