2016.4.23 追記:Swift版の記事を書きました。
CoreMotionを使って、歩数カウントを取得する方法をメモしておきます。
実装方法
まずは「CoreMotion.framework」を追加します。

ヘッダをインポートします。
#import <CoreMotion/CoreMotion.h>
インスタンスを生成します。
_stepCounter = [[CMStepCounter alloc] init];
歩数のカウントを開始します。
[_stepCounter startStepCountingUpdatesToQueue:[NSOperationQueue mainQueue]
updateOn:1
withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error) {
// 歩数が更新されるたびに呼ばれる
}];
- 第1引数:handler を呼び出す queue を指定
- 第2引数:何歩歩いたら handler を呼び出すか(実際にはこの指定通りには動かなかった)
- 第3引数:歩数更新時に呼び出す handler
第3引数で指定する Blocks には、計測を始めてからの累計歩数、更新時のタイムスタンプ、エラー情報が返ってきます。
歩数カウントが不要になったら、忘れずにカウントを停止しておきます。
[_stepCounter stopStepCountingUpdates];
また、歩数以外にもユーザの歩行情報(歩いているのか、走っているか等)も取得できます。
まずはインスタンスを生成します。
_activityManager = [[CMMotionActivityManager alloc] init];
取得を開始します。
[_activityManager startActivityUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMMotionActivity *activity) {
// 歩行ステータスが更新されるたびに呼ばれる
}];
歩行情報は CMMotionActivity というクラスで返ってきます。このクラスには次のプロパティが含まれます。
| 型 | プロパティ | 意味 |
|---|---|---|
| NSDate | startDate | アクションが発生した時間 |
| CMMotionActivityConfidence | confidence | データの精度(Low/Medium/High のいずれか) |
| BOOL | stationary | 静止状態 |
| BOOL | walking | 徒歩中 |
| BOOL | running | ランニング中 |
| BOOL | automotive | 自動車や電車等の乗り物に乗っている状態 |
| BOOL | unknown | 不明 |
どれかひとつの動作が YES になるというわけではなく、例えばautomotive と stationary が同時に YES になる状況もありえるようです。
最後は忘れずに停止しておきます。
[_activityManager stopActivityUpdates];