[swift] PromiseKit를 이용한 앱 내 위치 정보 활용 방법

이번 글에서는 Swift 프로그래밍 언어와 PromiseKit 프레임워크를 사용하여 iOS 앱에서 위치 정보를 활용하는 방법에 대해 알아보겠습니다.

PromiseKit란?

PromiseKit는 비동기 작업을 처리하기 위한 프레임워크로, 앱 개발에서 많이 사용되는 기능 중 하나인 위치 정보 관련 작업에도 유용하게 활용할 수 있습니다. PromiseKit는 Promise라는 객체를 사용하여 비동기 작업의 성공 또는 실패를 처리할 수 있습니다.

위치 정보 액세스 권한 획득

iOS에서 위치 정보를 사용하기 위해서는 앱이 위치 데이터에 접근할 수 있는 권한을 사용자로부터 획득해야 합니다. 위치 정보 액세스 권한을 획득하는 방법은 다음과 같습니다.

  1. Info.plist 파일에 “NSLocationWhenInUseUsageDescription” 또는 “NSLocationAlwaysUsageDescription” 키를 추가하고, 사용자에게 권한 요청 시에 표시될 메시지를 값으로 설정합니다.
<key>NSLocationWhenInUseUsageDescription</key>
<string> 앱이 위치 정보에 액세스하기 위해 필요합니다.</string>
  1. 위치 정보 액세스 권한을 요청하는 코드를 작성합니다.
import CoreLocation

let locationManager = CLLocationManager()

locationManager.requestWhenInUseAuthorization()

위 코드는 사용자에게 위치 정보 액세스 권한을 요청하는 코드입니다. 위치 정보 액세스 권한을 요청할 때는 CLLocationManager 객체를 사용하며, requestWhenInUseAuthorization() 메서드를 호출하여 요청을 수행할 수 있습니다.

위치 정보 가져오기

PromiseKit를 사용하여 위치 정보를 가져오는 예제 코드는 다음과 같습니다.

import CoreLocation
import PromiseKit

let locationManager = CLLocationManager()

func getCurrentLocation() -> Promise<CLLocation> {
    return Promise { seal in
        locationManager.requestWhenInUseAuthorization()
        
        firstly {
            CLLocationManager.promise()
        }.done { location in
            seal.fulfill(location)
        }.catch { error in
            seal.reject(error)
        }
    }
}

getCurrentLocation().done { location in
    print("현재 위치: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}.catch { error in
    print("위치 정보를 가져오는데 에러 발생: \(error.localizedDescription)")
}

위 코드에서 getCurrentLocation() 함수는 Promise<CLLocation>를 반환하며, 위치 정보를 성공적으로 가져올 경우 fulfill() 메서드를 호출하여 Promise를 성공 상태로 만듭니다. 만약 에러가 발생하면 reject() 메서드를 호출하여 Promise를 실패 상태로 만듭니다.

위치 정보를 성공적으로 가져온 후에는 .done 핸들러를 사용하여 위치 정보를 처리할 수 있습니다. 또한, .catch 핸들러를 사용하여 에러를 처리할 수도 있습니다.

결론

위치 정보를 활용하는 앱을 개발할 때 PromiseKit를 사용하면 비동기 작업을 보다 쉽게 처리할 수 있습니다. PromiseKit를 사용하여 위치 정보 액세스 권한을 요청하고, 위치 정보를 가져오는 방법에 대해 알아보았습니다.

이제 PromiseKit를 활용하여 앱 내 위치 정보를 수월하게 활용할 수 있습니다. Happy coding!