[iOS] CoreLocationUI에 대해

Chae-young Park·2024년 7월 25일

사이드 프로젝트에 사용할 기술에 대해 알아보던 중 CoreLocationUI를 접하게 되었다. CoreLocation과는 어떤 차이가 있고, 어떻게 사용하는 건지 궁금해서 찾아보니까 WWDC2021에서 소개된 프레임워크였다.

https://developer.apple.com/videos/play/wwdc2021/10102

CoreLocationUI는 SwiftUI에서 사용하는 LocationButton과 UIKit에서 사용하는 CLLocationButton을 제공하는데 그 중에서 나는 이번 사이드 프로젝트를 SwiftUI로 개발할 예정이기 때문에 LocationButton에 대해 깊이 파보기로 했다.

우선 LocationButton이 나온 배경에는 사람들이 앱을 사용하는 중에 위치 권한이 필요없다고 생각하여 "Allow Once"를 선택하는 데에 있다. 하지만 위치 권한이 필요한 앱에서 "Allow Once"를 선택하게 되면 사용하는 중에는 권한이 유지되지만 앱이 백그라운드에 들어가게 되면 해당 권한을 잃게 된다. 따라서 위치 권한이 필요한 상황이 생기면 권한을 다시 설정해주어야 한다. 만약 "Don't Allow"를 선택했다면 Settings에 가서 직접 설정해야하는 불편함이 존재한다.

반면 LocationButton을 사용하는 경우, 이전에 "Don't Allow"을 눌렀더라도 위치 권한이 필요한 상황에 다시 위치 권한 허용 알람이 뜨고, 이외에 "Allow Once", 또는 "Allow While Using App"를 눌렀다면 이전에 선택한 상태가 유지된다. 즉, LocationButton는 사용자가 상황에 따라 그들의 위치 정보를 허용할 수 있다는 점에서 장점을 가진다.

WWDC 영상에 나온 예제 코드를 참고하려고 봤더니 foregroundColor()와 cornerRadius() 모두 deprecated 예정이라고... 아무래도 WWDC2021 당시에 작성된 코드라서 그런 것 같다. 각각 foregroundStyle()과 clipShape() (또는 fill())로 대체하여 아래와 같이 코드를 작성했다.

import SwiftUI
import CoreLocationUI

struct ContentView: View {
    var body: some View {
        VStack {
            LocationButton {
                // do something on button press...
            }
            .foregroundStyle(.white)
            .clipShape(.rect(cornerRadius: 15))
            .labelStyle(.titleAndIcon)
            .symbolVariant(.fill)
            .tint(.blue)
        }
    }
}

위치 권한은 Preview로 확인이 불가하기 때문에 Simulator로 실행해보면 아래 사진과 같이 나오는데 "Not Now"를 누르면 그대로 창이 닫히고 원래 화면으로 돌아온다. "OK"를 누르면 "Allow Once" 권한을 얻게 된다.

주의할 점은 CoreLocationUI의 경우, 위치 정보를 얻는 용도가 아니라 위치 정보를 얻기 위한 권한 설정에 관한 프레임워크이다. 위치 정보를 직접적으로 얻고, 컨트롤하기 위해서는 CoreLocation 프레임워크를 사용해야 한다.

더 자세한 내용은 Apple Documentation - CoreLocationApple Documentation - CoreLocationUI에서 찾아볼 수 있다.

profile
iOS developer

0개의 댓글