[iPhone] CMPedometer で万歩計を作る

CMPedometerを使うと簡単に歩数が測れます。歩数以外に、距離、速度も計測できるようです。

 

Swift 5.1
Xcode 11.3.1

 

CMPedometer

 
CMPedoMeter は各種センサーを扱うCore Motionにある歩数などの情報を取得することができます。

データは過去に遡って1週間程度まで取り出せるようですが、ハードがらみで割り込みはコストがかかるのか瞬時のデータは逆に出しにくくなっています。
 

 

プライバシー設定

 
ユーザーにプライバシー許可を取得しないといけません。(どんだけ歩いたかプライベートなことなんでしょうか…)

This app has crashed because it attempted to access privacy-sensitive data without a usage description….

 
こういうエラーが表示されたら、説明の通りNSMotionUsageDescriptionをInfo.plistに設定。
stringにはユーザーにこのアプリで使う理由を表示して許可を得られるようにします。
やり方としてはXcodeのInfo.plistに設定するか、直にファイルをエディタで開いて以下のように追加するといいでしょう。
 

 

startupdates

 
ライブのアップデートでデータを取得するためハンドラーを使いますが、UIで値を表示させたい時はメインスレッドで実行させないと遅延が生じます。

 
 
ViewController.swift

 
あとはストーリーボードにUILabelを置き、コードのlabelを紐付けします。

これで、実機にインストールして実際に歩いてみましょう
また、歩数以外にもいくつかのデータを取得できます。

ただし、DispatchQueueを使ってメインスレッドでこれら全てのデータを一度に取得しようとするとデッドロックが生じる可能性があります。

Important
Attempting to synchronously execute a work item on the main queue results in deadlock.

DispatchQueue – Dispatch | Apple Developer Documentation

いずれにしても、データは非同期処理なので結果が出るのに多少時間がかかります。

 

queryPedometerData

 
アップデートとは別に時間を区切ってその期間の歩数を取得する方法もあります

このような感じになりました。

ViewController.swift

これで、Labelは行数を10行程度にしてstartとstopのボタンをstoryboardに紐づければ完成です。

 
 
References:
CMPedometer – Core Motion | Apple Developer DocumentationCore Motion | Apple Developer Documentation
CMPedometerData
DispatchQueue – Dispatch | Apple Developer Documentation

一人でアプリ開発の限界を感じたら

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンライン・スクールがいいと思います。


TECH ACADEMY
自宅にいながら1時間でプログラミング基礎を習得

こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン



とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約20,000名の受講生と300社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


Play Ground
本業と並行してやるには月額制なのがありがたいです。


無料で転職まで
これはiOSアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールで「エンジニアになって職を得たい」のであれば手っ取り早いかもしれません

受講料無料:社会人転職コース


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

  • このエントリーをはてなブックマークに追加

フォローする