본문 바로가기

iOS

[iOS] Toss 만보기 개발하기! - CoreMotion, CMPedometer

안녕하세요~! 꾸준히 노력하는 iOS 개발자 Dave입니다😜

제가 이번에 회사 프로젝트로 만보기를 만들게 되었습니다😤
HealthKit을 사용하는 것이 아닌 걸음 수 데이터 조작이 불가능한 만보기를 만들어야하기 때문에 몹시 막막했습니다ㅠㅠ
참고 가능한 만보기 앱이 Toss앱에 있는 만보기 기능인데요.
열심히 구글링하며 찾아보니 생각보다 쉽더라구요🤩

그러면 지금부터 Toss 만보기를 개발해보도록 하겠습니다!!

 

Toss 만보기 개발하는 방법

우선 새로운 프로젝트를 생성해줍니다.

UI는 크게 신경 쓰지 않고, 걸음 수만 보일 수 있게 가운데에 UILabel 하나만 놔두겠습니다.

사진 1

Toss 만보기를 개발하기 위해서는 Core Motion에 속한 CMPedometer를 사용해야합니다.

Core Motion이란? 
가속도, 자이로스코프, 만보기 등 여러 iOS 장치의 하드웨어에서 동작 관련 데이터, 이벤트를 처리해주는 프레임워크
CMPedometer란?
시스템에 생성된 실시간 걸음 수 데이터를 가져오기 위한 객체

 

우선 CMPedometer를 사용하기 위해 CoreMotion을 import 해줍니다.

import CoreMotion

 

CoreMotion을 사용하기 위해서는 동의를 받아야합니다.
Info.plist의 Source Code에서 <dict> </dict> 안에 추가해주세요.

<key>NSMotionUsageDescription</key>
<string>동의 문구 (ex.만보기 사용을 위해 동의해주세요.) </string>

 

CMPedometer에서 걸음 수 데이터를 가져올 수 있는 지 체크하는 코드를 적어줍니다.

// CMPedometer에서 걸음 수 데이터를 가져올 수 있는지 체크
if CMPedometer.isStepCountingAvailable() {
	다음 실행문
}

 

실시간으로 걸음 수 데이터가 변경되면 실행되는 함수

pedometer.startUpdates(from: Calendar.current.startOfDay(for: Date())) { data, error in
    print(data?.numberOfSteps ?? 0)
}

 

위에 코드들만 사용하면 Toss 만보기가 완성됩니다.

 

전체 코드

import UIKit
import CoreMotion

class ViewController: UIViewController {
    
    let pedometer = CMPedometer()

    @IBOutlet weak var pedometerLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 걸음 수 데이터 가져올 수 있는지 체크
        if CMPedometer.isStepCountingAvailable() {
            // 가져올 수 있으면 함수 호출
            pedometerSubscription()
        }
    }
	
    // 실시간으로 걸음 수 데이터가 변경되면 text 업데이트
    func pedometerSubscription() {
        pedometer.startUpdates(from: Calendar.current.startOfDay(for: Date())) { data, error in
            DispatchQueue.main.async {
                self.pedometerLabel.text = "\(data?.numberOfSteps ?? 0)"
            }
        }
    }
}

 

오늘은 Toss 만보기를 개발하는 방법을 알려드렸습니다!

궁금하신 점이 있으시면 댓글을 남겨주세요~~!!