俺 Pedia

窓際エンジニア(仮)の日常

CMStepcounterの挙動が(僕にとっては)辛い件 ①

CMStepCounterというとiOS7&iPhone5sの登場にあわせ搭載されたM7チップの象徴のような機能の一つでしたが、既にiOS8ではDeprecatedとなってしまったという非常にかわいそうな子の一人です。
 
なぜそんなものをまだ使ってるのですか?という事についてはおいおい機会があれば記事にするとして、このCMStepCounterの返す値が非常に(僕にとっては)すごく辛いです。
 
queryStepCountStartingFrom:to:toQueue:withHandler:を使うと指定した期間の歩数が返ってくるわけですが、この値は原則エラーが発生しない限り「0」を返します。 例えば未来日時を指定した場合ですが、この場合もエラーではなく「0」が返ります。
 
この仕様自体は単純なソフトウェアだけでなくハードウェアデバイスが絡むものである以上それほど珍しいものでもないのですが、さらに状況を難しくするのがこの値は必ずしも正しい値を返すわけではない(かもしれない)という事です。
 
具体的な例を挙げて説明します。
 
以下の計測結果はqueryStepCountStartingFrom:to:toQueue:withHandler:を使用し12月14日の12時30分から5分間の歩数を取得した結果です。
 

計測時間 計測結果(歩数) 補足
 12月14日 12時36分   0歩   初回の計測 
 12月14日 14時45分   7歩   1回目の変化 
 12月14日 17時30分   7歩 
 12月14日 20時52分   5歩   2回目の変化 
 12月15日 16時25分   5歩 
 12月16日 09時35分   5歩 
 12月17日 09時38分   5歩 

 
初回の計測から約24時間+αの変化をかなり雑な感じですがまとめたものが上の表となります。
なお、計測時間の間でも数回値の検証をしていますが、その間は特に変化はありません。
 
14日の12時の時点では0歩と結果が返ってきたものが、14時の計測では7歩に変化しています。
この初回の計測については、たまたま値取得が走ったタイミングが計測時間に近い事も有る為、もしかすると異常値という可能性も想定されます。
 
しかしその後、17時の計測では14時と変わらず7歩を返しますが20時になるとさらに変化し5歩に変化します。
さらに日付をまたぎ翌日の夕方まで状況を静観しましたが結果としては5歩から変化はなくその後も変化はありません。
 
いかがでしょうか。
ご覧いただいたように(僕にとっては)かなり厳しい結果です。
 
現状この原因について詳細が記載されているような記事を見つける事はできず、海外のブログでも「たまに見当違いな値を返してこまっちゃうなー」見たいな感じの事が書かれているのみで、対策や解決策を見つける事はできませんでした。 国内の記事ですと唯一発見できたのが「RE:START」の「core-plotを使った時のメモ」という記事で「バグだ」と突っ込まれたという事を書かれているもののみでした。
 
個人的には発表された当初にかなりの数のブログでM7チップとCMStepCounterについての記事が書かれていたのでもっと検証と対策の情報があるかとおもったのですが…
 
なお、恐ろしい事にこの取得値が変化する現象は私が試している限りでは単位時間を小さくしようが大きくしようが発生し、そして上記に計測結果からわかるようにさらに恐ろしい事実としてはその変化は1度ではないという事です。
このあたりの話は別な記事に書き起こす事としたいと思います。
 
ちなみに、私の開発機はiOS7.1.2(iPhone5s)である為、iOS8にバージョンアップしCMPedometerを用いた場合にどうなるかという事についてはまだ未検証な状況です。
テスト開発用のiOS8(iPhone5s)が手に入ったらチェックして記事にしてみたいとおもいますが、おそらく年明けになるものとおもわれます。
 
結構な数iOS向けの歩数計アプリは出ているのでなにか解決策はあるものと考えているのですがなかなかな難しいですね。 情報をお持ちの方は是非突っ込みお願いします。