→ Swift Archive

[SwiftUI] 앱이 background 에서 다시 돌아왔을 때 알기

Swift librarian 2024. 1. 27. 20:33

ScenePhase?

앱을 만들다보면 앱이 잠깐 백그라운드로 갔을때나 백그라운드에서 다시 돌아왔을때, 시점이 필요할때가 있다. 나같은 경우는 잠깐 앱을 background 상태로 두고 권한을 변경한다면? 이 것을 UI 에 바로 적용시킬 수 없을까? 하는 궁금증에서 찾아보았는데 방법이 있었다! 바로 ScenePhase 를 활용하면 된다.

이렇게 나갔다 들어왔을때 아는 방법이 없을까?

 

공식문서에 정말 친절하게 사용설명이 되어있다.

 

ScenePhase | Apple Developer Documentation

An indication of a scene’s operational state.

developer.apple.com

 

ScenePhase 사용해보기

사용방법은 아주 간단하다. 아래와 같이 @Environment 로 변수를 선언해주고, scenePhase 로 앱의 상태를 판별할 수 있다.

    @Environment(\.scenePhase) private var scenePhase

        // switch case 도 가능하고 if 로 처리 해줘도 된다.
        // 모든 상태를 보여드리기 위해 switch case 를 사용했습니다.
        .onChange(of: scenePhase) { _, phase in
            switch phase {
            case .background:
                print("background")
            case .inactive:
                print("inactive")
            case .active:
                print("active")
            @unknown default:
                print("unknown default")
            }
        }

 

위와 같이 뷰에 위의 코드를 넣어준다면...

처음 뷰가 나왔을때 active, 앱을 올려버리면(?) inactive 가 되면서 background 가 되는 모습을 볼 수 있다. 또한 다시 앱을 키면 inactive, active 가 차례로 나오는 것을 볼 수 있다.

 

슬로우 모션

inactive 가 어떤 조건에서 나타나는 건지 궁금해서 slow motion 으로 빌드를 해보았는데, 아래와 같이 앱이 커지거나 작아지고 있는 순간에는 inactive 가 되고 이것이 완료 되었을때 background, active 가 나타나는데 background 의 경우 active 가 나타나는 타이밍보단 살짝 빠르다.

 

결론

ScenePhase 를 통해 간단하게 앱의 background, inactive, active 상태를 받아올 수 있다! 여기서 주의 할 것은 inactive 상태앱이 꺼진 상태가 아닌 앱이 사라지거나 나타나지고 있는 상태를 나타낸다!