Table of Contents
なぜ センサー データ マットレス フィットネス アプリ
現代のiOSデバイスは、モーション、位置、さらには心拍数を検出できるセンサーの配列をパックします。これらのセンサーをフィットネストラッキングアプリに統合することで、未加工ハードウェアデータをステップカウント、移動距離、カロリーの燃焼、およびルートマップなどの有意義なメトリックに変換します。コアモーション]とコアロケーションフレームワーク、開発者は、インテリジェントなアプリケーションをアクティブにすることで、アクティブに機能するようなアクティビティやアクティビティを学習することができます。
iOSデバイスで利用可能なキーセンサー
コードに潜入する前に、センサーがどんなものなのかを理解することが重要です。
- []加速度計] - 加速力を測定し、ステップ検出と方向に使用されます。
- []ジャイロスコープ] – 回転を測定し、活動分類と落下検出に役立ちます。
- GPS[] - 正確な位置、速度、およびルートの追跡を提供します。
- ]Magnetometer - ナビゲーション機能に便利なコンパスの方向を提供します。
- ] バリア – 床数と高度増加の利益のために使用される高度の変化を測定します。
- []Heart Rate Sensors - Apple WatchまたはサードパーティのBluetoothデバイスを介して利用可能な、 HealthKitまたはCore Bluetoothを介して統合。
各センサーは、特定のフレームワークを必要とします: 加速度計、ジャイロスコープ、および磁気計のコア・モーション。 GPSとバロメーターのコア・ロケーション。 心拍数やその他の健康データのための HealthKit。
開発環境の設定
まずは、Xcode(Mac App Storeから)をインストールし、新しいiOSプロジェクトを作成して起動します。 []Appテンプレートを選択し、Apple Developerアカウントで実際のデバイスをテストできるようにします。 センサーデータは、実際のハードウェアが必要です。 シミュレータは、センサーサポート(例えば、GPS高度なし、実際のアクセラレータノイズなし)が制限されています。
Xcode プロジェクトでは、必要な機能が の下の [Signing & Capabilities で有効にします。
- []位置サービス[]] - GPSおよび地域監視用。
- HealthKit] - 健康データを読み書きする計画の場合。
- 背景モード - 音声フィードバックが必要な場合は、「オーディオ、AirPlay、および画像」をチェックします。
適切なエンタイトルとインフォリストキーを追加します。例えば、ユーザーフレンドリーな説明で[とを追加してください。
要求の権限の権利方法
ユーザーは、ますますプライバシー意識を高めます。 機能が実際に必要とされている時点で、起動時に要求されるように常に許可を要求します。 位置情報許可については、 ]]]CLLocationManager を使用します。
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
モーションデータでは、[CMMotionManagerを使用します。 モーションデータがユーザー(それはデバイス - 内部と見なされます)からの明示的な許可を必要としないことに注意して下さいが、それでもあなたのプライバシーポリシーでそれを必要とする理由を説明しなければなりません。 HealthKitデータの場合、有効なHKHealthStoreと呼び出しが必要です。 信頼を築くために、インフォプリストで明確で簡潔な文字列を提供してください。
センサーデータ収集の実装
データ収集は、あなたのフィットネスアプリのコアです。 以下は、モーションと位置のコレクションをカバーしています。
コアモーションによる加速器とジャイロスコープデータ
[CMMotionManager]]を使用して、更新を開始します。 精度とバッテリー寿命のバランスをとる更新間隔を選択します。 ステップカウントのために、1/50秒(20ms)は典型的ですが、UIの更新には、1/10秒は十分です。
import CoreMotion
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
motionManager.startAccelerometerUpdates(to: .main) { (data, error) in
guard let accelData = data else { return }
// Use accelData.acceleration.x, .y, .z
}
ジャイロスコープとマグネロメーターの場合、同様の方法が存在します。と。デバイス態度(重力に対する回転)が必要な場合は、加速度計、ジャイロスコープ、および磁気計データを結合するを使用します。
コアロケーションとGPSと位置データ
位置情報の更新を受け取るために[CLLocationManager[]を設定してください。 アクティビティに基づいて目的の精度を設定します。 野外の実行のために、が適切です。 屋内歩くには、は、バッテリーを節約します。
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 5 // meters
locationManager.startUpdatingLocation()
デリゲートメソッドを実装して、新しい座標を処理します。 []horizontalAccuracyプロパティを使用して、低品質の読み込みをフィルタアウトします。 ルートマッピングのために、ストアはタイムスタンプとともに座標を格納します。
センサーデータを有用なメトリックに処理する
生センサーデータはノイズです。処理手順は通常、フィルタリング、校正、計算を含みます。
加速器からのステップ計算
加速の倍率でピーク検出アルゴリズムを使用します。一般的なアプローチは、Euclidean ノルム(sqrt(x2+y2+z2)を計算し、重力を取り除くためにハイパスフィルタを適用し、閾値の上のピークを検出することです。生産のために、Apple の組み込み CMPedometerを使用して、ステップカウントと自分自身の検出を実装する必要はありません。
if CMPedometer.isStepCountingAvailable() {
var pedometer = CMPedometer()
pedometer.startUpdates(from: Date()) { (data, error) in
if let steps = data?.numberOfSteps {
// update UI
}
}
}
同様に、[CMPedometerは、距離、ペース、および床を昇順/降下させることができます。
活動の分類
[CMMotionActivityManager を使用して、ユーザーのモーション状態(歩行、走行、サイクリング、固定)を自動的に分類します。これにより、別の検出アルゴリズムの必要性を減らし、高レベルのコンテキストを提供します。
let activityManager = CMMotionActivityManager()
activityManager.startActivityUpdates(to: .main) { (activity) in
if activity?.walking == true {
// treat as walking
} else if activity?.running == true {
// treat as running
}
}
GPSからの間隔そして速度
位置情報と位置情報(]])の検索(から:)のCLLocationのメソッドを使用して、連続した位置情報ポイント間の距離を計算します。 速度は]プロパティ(m /秒)を介して利用できます。 不当な速度(例えば、> 人的活動のための30 m /秒)をフィルタアウトします。
データの表示:チャートとマップ
ビジュアルフィードバックは、ユーザーがモチベーションを保ちます。 ルートマップでは、MKMapViewを使用し、記録された座標を接続するポリラインを描画します。 パフォーマンスメトリックの場合は、Charts[[](人気のオープンソースライブラリ)またはAppleのSwift Chartsフレームワーク(iOS 16 +)。 平均速度、および高速度などのサマリーステータスを表示してください。
import MapKit
let polyline = MKPolyline(coordinates: &coordinates, count: coordinates.count)
mapView.addOverlay(polyline)
心拍数の場合、 HealthKit または Bluetooth 経由で接続する場合は、]]WKInterfaceGraphicまたは SwiftUI Chart[]]]ビューでリアルタイムグラフを表示します。
背景の更新の処理
フィットネスアプリは、アプリがバックグラウンドにあるときにデータを収集する必要があります。 [ 背景モード] を有効にし、「ロケーション更新」を選択します。 継続的な背景位置のために、 ] を使用します。 重要な変更監視(頻繁な、電池の友好的)のために、 を使用します。
モーションデータでは、背景の更新が限られています。アプリがフォアグラウンドにある間、または位置更新後にのみ、モーションの更新を配信するシステムがあります。信頼性を向上させるために、位置データがワークアウトに関連しているシステムにヒントを出すために、CLActivityTypeを使用して検討してください。
データストレージと HealthKit の統合
ワークアウトデータを永続的に保存します。オプション:
- コアデータ - 複雑なオブジェクトと関係のために良い。
- SQLite - 軽量で直接SQL制御。
- []UserDefaults] - センサーログではなく、小さな設定のみ。
- [HealthKit] - アップルの健康データのための中央リポジトリ。 HealthKitへのワークアウトを書くと、Apple Healthやその他のアプリに使用できます。
HealthKit を統合するには、ワークアウトデータを書き込み、関連するサンプル(心拍数、距離)を読み込み、最初に承認を要求します。その後、[]]HKWorkout]オブジェクトを作成し、保存します。
let healthStore = HKHealthStore()
let workout = HKWorkout(activityType: .running, start: startDate, end: endDate, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { (success, error) in
// handle
}
ワークアウト中の心拍数のサンプルを同時読み込むには、[]]HKAnchoredObjectQueryまたはHKObserverQueryを使用します。
バッテリー寿命と性能の最適化
連続センサー使用は電池を排出します。これらの戦略を適用します。
- [更新間隔を調節] - UIの更新のためのより低い頻度を使用して下さい、必要とされたときだけより高い。
- ]距離フィルタリング - GPSの場合、を合理的な値(10m)に設定します。
- 文房具 時に使用する – []CMMotionActivityManager]] を使用して、静止した期間を検出し、GPSの更新を停止します。
- [] 更新を防御 - iOS 6 +では、[を使用して、場所の更新が電力節約のために延期されるようにすることができます。
- バッチ処理] - 定期的にデータを収集し、保存に書き込み(例えば、10分ごとに)。
センサーデータの試行とデバッグ
シミュレータのテストは制限されます。 正確な加速度計、GPS、心拍数データについては、常に実際のデバイスでテストします。 Xcodeの]をimulate Locationを、フリードライブルートをテストするための機能です。 モーションデータでは、デバイス上の開発者メニューのデバッグツールを使用できます。 ログセンサーは、タイムスタンプ条件で読み、動作確認を有効にして、ネットワークの動作確認と設定を有効にします。
ユーザーエクスペリエンスとプライバシーの考え方
プライバシーは重要です。 Appleの[]]App Store Review Guidelinesに従って、明確なプライバシーポリシーを維持してください。 明示的な同意なしにセンサーデータを共有しないでください。 可能な場合は、オンデバイス処理を使用してください。 分析のために、匿名化および集計します。
ユーザ体験には以下が含まれます:
- センサーの使用と利点を説明するオンボーディング画面。
- ワークアウト(オーディオキュー、ハプティックフィードバック)におけるリアルタイムフィードバック。
- ワークアウトデータを見直し、編集、削除する機能。
- オフライン機能 – ネットワークが利用可能になったときにローカルでデータを保存し、同期します。
未来の拡大
加えることを考慮して下さい:
- 心拍数とワークアウトトラッキングの]と統合。
- 高度な活動認識のための機械学習モデル(コアML)。
- CloudKit を使用したソーシャル機能(リーダーボード、課題)
- []]ARKit[ を使用して、ルートのARオーバーレイ。
コンテンツ
iOS のセンサーデータ統合によるフィットネストラッキングアプリの構築は、やりがいのあるチャレンジです。Core Motion、Core Location、および HealthKit を活用することで、ユーザーのプライバシーを尊重しながら、正確で実用的なインサイトを提供するアプリを作成できます。クリーンなコード、バッテリーの効率性、シームレスなユーザーエクスペリエンスに焦点を当てます。ステップカウントと場所を小さくし、心拍数と高度な分析に拡張します。公式のドキュメントについては、 コアモーション、[FLT:[FLT:]、[FLT:]、[FLT: [FLT:]、[FLT: [FLT:[FLT:]、[F]、[FLT:[F]]、[F]、[FLT:[F]]、[F]、[F]、[F]、[FLT:[F]、[F]、[FLT:[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F