[swift] Core Motion의 걸음수와 거리 추적 기능

iOS 앱을 개발할 때, 사용자의 활동을 추적하고 모니터링 할 수 있는 기능이 필요한 경우가 있습니다. Core Motion은 애플이 제공하는 프레임워크 중 하나로, 사용자의 휴대폰과 같은 기기의 모션 데이터를 수집하고 처리할 수 있는 기능을 제공합니다. 이 중에서 걸음수와 거리 추적 기능은 많은 앱에서 사용되는 기본적인 기능입니다.

Core Motion 프레임워크

Core Motion 프레임워크는 가속도, 자이로스코프, 자기장, 걸음수, 거리 등 다양한 센서 데이터를 제공합니다. 이 중에서 우리가 관심을 가질 걸음수와 거리 추적 기능에 대해 알아보겠습니다.

걸음수 추적하기

걸음수 추적은 사용자가 이동한 거리를 추적하는 기능입니다. Core Motion은 CMStepCounter 클래스를 통해 간단하게 걸음수를 추적할 수 있습니다.

import CoreMotion

let stepCounter = CMStepCounter()

if CMStepCounter.isStepCountingAvailable() {
    let fromDate = Date(timeIntervalSinceNow: -86400) // 24시간 전부터
    let toDate = Date() // 현재까지
    
    stepCounter.queryStepCountStarting(from: fromDate, to: toDate, to: .main) { (numberOfSteps, error) in
        guard error == nil else {
            print("걸음수 추적 에러: \(error)")
            return
        }
        
        if let steps = numberOfSteps {
            print("24시간 동안의 총 걸음수: \(steps)")
        }
    }
}

위의 코드는 24시간 동안의 총 걸음수를 출력하는 예시입니다. CMStepCounter.isStepCountingAvailable() 메서드를 통해 걸음수 추적이 가능한지 확인한 후, queryStepCountStarting(from:to:to:withHandler:) 메서드를 사용하여 걸음수를 가져올 수 있습니다. 결과는 클로저를 통해 받게 되며, 사용자의 걸음수가 없을 경우 nil을 반환합니다.

거리 추적하기

거리 추적은 사용자가 이동한 거리를 추적하는 기능입니다. 거리는 걸음수를 기반으로 추정되며, 휴대폰의 가속도 센서를 통해 계산됩니다. Core Motion은 CMStepCounter 클래스에 걸음수에 기반한 거리 추적 기능을 추가로 제공합니다.

import CoreMotion

let stepCounter = CMStepCounter()

if CMStepCounter.isDistanceAvailable() {
    let fromDate = Date(timeIntervalSinceNow: -86400) // 24시간 전부터
    let toDate = Date() // 현재까지
    
    stepCounter.queryDistanceWalkingCycling(startingFrom: fromDate, to: toDate) { (distance, error) in
        guard error == nil else {
            print("거리 추적 에러: \(error)")
            return
        }
        
        if let distance = distance {
            print("24시간 동안의 총 이동 거리 (m): \(distance)")
        }
    }
}

위의 코드는 24시간 동안의 총 이동 거리를 출력하는 예시입니다. CMStepCounter.isDistanceAvailable() 메서드를 통해 거리 추적이 가능한지 확인한 후, queryDistanceWalkingCycling(startingFrom:to:withHandler:) 메서드를 사용하여 거리를 가져올 수 있습니다. 결과는 클로저를 통해 받게 되며, 사용자의 이동 거리가 없을 경우 nil을 반환합니다.

결론

Core Motion 프레임워크를 사용하면 iOS 앱에서 사용자의 걸음수와 거리를 간단하게 추적할 수 있습니다. 이를 활용하여 다양한 운동 앱이나 건강 관리 앱 등을 개발할 수 있습니다. Core Motion 프레임워크의 다른 기능들도 함께 알아보면 더 다양한 앱을 개발할 수 있을 것입니다.