読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

iPhone 5sのM7チップを試してみる

今回のエンジニアブログ担当の山下です。

iPhone 5sが発売されてはや一ヶ月が経とうとしています。
5sには大幅に進化したA7プロセッサとは別に、Apple M7と呼ばれるチップが新しく追加されました。

M7チップは加速度センサ、ジャイロセンサ、電子コンパスからのデータ処理を専門的に行います。
A7チップとは独立しているため、ユーザの動きを常に追いかけていてもCPUに負担はかけません。
これによりバッテリ消費の軽減にも貢献しています。

そしてこのM7チップは、一週間分の歩数データを常に記録し続けています。
歩数をカウントするためにアプリ側でセンサを常に監視する必要は一切無く、
M7チップがカウントした歩数を取得して利用するだけです。非常にかんたんですね。
実際に触ってみました。

実装

M7

今日歩いたの歩数を表示する簡単なアプリを作成します。
まず以下の手順でプロジェクトの作成とUI設計を行いました。

  • 新しいSingle View Applicationプロジェクトを作成
  • CoreMotion.frameworkをプロジェクトに追加
  • StoryboardでView ControllerにLabelを一つ設置
  • LabelとソースコードとはstepLabelという名前でIBOutlet接続

以下はViewController.mの実装です。

#import "ViewController.h"  
#import <CoreMotion/CoreMotion.h>  
  
@implementation ViewController  
  
- (void)didReceiveMemoryWarning  
{  
    [super didReceiveMemoryWarning];  
}  
  
- (void)viewDidLoad  
{  
    [super viewDidLoad];  
    [self updateStepCount];  
}  
  
// 歩数の表示  
- (void)updateStepCount  
{  
    if([CMStepCounter isStepCountingAvailable])  
    {  
        // StepCounterのインスタンス作成  
        CMStepCounter *stepCounter = [[CMStepCounter alloc] init];  
  
        // 歩数を取得  
        [stepCounter queryStepCountStartingFrom:[self startDateOfToday]  
                                             to:[NSDate date]  
                                        toQueue:[NSOperationQueue mainQueue]  
                                    withHandler:^(NSInteger numberOfSteps, NSError *error) {  
                                        self.stepLabel.text = [NSString stringWithFormat:@"%ld", numberOfSteps];  
                                    }];  
    }  
}  
  
// 今日の0時0分を取得  
- (NSDate *)startDateOfToday  
{  
    NSCalendar *calendar = [NSCalendar currentCalendar];  
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit  
                                               fromDate:[NSDate date]];  
  
    return [calendar dateFromComponents:components];  
}  
  
@end  

今回はCMStepCounterのインスタンスメソッド-queryStepCountStartingFrom:to:toQueue:withHandler:を使いました。
FromとToで歩数をカウントしたい日時の範囲をNSDate型で指定し、withHandlerで指定したブロックで受け取ります。ブロックの第一引数に歩数がNSInteger型で入ってくるため、これをラベルで表示します。(iPhone 5sは64bitプロセッサなのでNSIntegerは内部的にlongになります。そのためstringWithFormatでは%ldを指定しています)

一日の運動量を計るフィットネスアプリだけでなく、たとえば運動量に応じてキャラクタが育つといったように、ゲーム分野への応用もおもしろそうです。
今のところM7チップを搭載したデバイスはiPhone 5sのみですので、今回の記述は5s以外のデバイスでは動作しないことにご注意下さい。