iOS
swift3

CMPedometerを用いた歩数の取得方法

More than 1 year has passed since last update.

検証環境

  • XCode8.3.3
  • Swift3.1
  • iOS10.3.1
  • iPhone6s+

歩数の取得

端末内の歩数はCMPedometerで取得できる。
https://developer.apple.com/documentation/coremotion/cmpedometer

Info.plistにNSMotionUsageDescription(Privacy - Motion Usage Descriptionに自動で置き換えられた)を追加して利用目的を書く必要がある。これがないとクラッシュする。

コード

以下のようなコードで簡単に歩数を取得することができた。handlerが実行されるのはメインスレッドではないので、UIを更新する場合は、メインスレッドでの実行が必要なので注意が必要。

startUpdates(from:withHandler:)などでライブでデータを取得する場合はstopも呼ぶようにする。

@IBOutlet weak var label: UILabel!
    var pedometer: CMPedometer!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        pedometer = CMPedometer()

        let calendar = Calendar(identifier: .gregorian)
        let date = calendar.date(from: DateComponents(year: 2017, month: 9, day: 4))!

        // onetime
        pedometer.queryPedometerData(from: date, to: Date()) { (data, error) in
            guard let data = data else { return }
            DispatchQueue.main.async {
                self.label.text = "\(data.numberOfSteps)"
            }
        }

        // always
        pedometer.startUpdates(from: date) { data, error in
            guard let data = data else { return }
            DispatchQueue.main.async {
                self.label.text = "\(data.numberOfSteps)"
            }
        }
    }

    deinit {
        pedometer.stopUpdates()
    }