ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
モーションによるヘルスケア測定
モーションデータを利用して、Appの健康モニタリングを次のレベルに引き上げる方法について確認します。iPhone用の歩行安定性(Walking Steadiness)とApple Watch用の6分間歩行テストのデータに注目します。歩行安定性では、Appで歩行の安定性や転倒リスクについて評価します。また、6分間歩行テストでは、HealthKitリキャリブレーション推定APIと連携して、手術などの緊急処置後の歩行安定性の変化を追跡できます。これらの指標をサポートすることで、Appを使用する人々に実用的な健康データを提供し、患者のケアや臨床試験の改善に役立てる方法を紹介します。こうした方法は、特に遠隔でのサービス提供が増えている中で非常に有効です。
リソース
- appleWalkingSteadiness
- appleWalkingSteadinessEvent
- CMFallDetectionManager
- Core Motion
- Getting movement disorder symptom data
- HKAppleWalkingSteadinessClassification
- Measuring Walking Quality Through iPhone Mobility Metrics
- Using Apple Watch to Estimate Cardio Fitness with VO2 max
- Using Apple Watch to Estimate Six-Minute Walk Distance
関連ビデオ
WWDC20
-
ダウンロード
♪ (モーションによるヘルスケア測定) こんにちは WWDCへようこそ Appleソフトウェアチームの 科学者のイリダです 後ほど Motionエンジニアの ソーハムが参加してくれます 今日は ウオーキングの持久力と 質を より深く理解することができる 2つの新しい機能を ご紹介します ウオーキングは 非常に重要なサインです 歩き方は その人の全体的な 健康状態や幸福度を示す 重要な情報です 怪我からの回復 転倒リスクの評価 老化プロセスのモニター さらには死亡率の予測 などにも利用できます WWDC2020では 1日の歩行パターンを 強力なインサイトで把握できる 一連のモビリティメトリクス を紹介しました これらのメトリクスについては 昨年のセッション 「歩数のカウントの向こう側」で ご紹介しています 本日は これらの メトリクスの1つである 「6分間歩行」メトリクスの Apple Watch向け アップデートをご紹介します 新しいリキャリブレーションAPI でこのメトリクスは 健康状態の急激な変化を より良く捉えることを可能にします また全く新しいメトリクスとして iPhone向けに提供されている 「歩行安定性」機能に ついてもご紹介します この2つのメトリクスの共通点は 何でしょうか? どちらもウオーキングの重要な側面 を把握するための優れた方法であり 継続的かつ客観的な測定値を提供 することで 改善状況を確認したり 早期の警告兆候を把握したり することができます しかし これらは異なるものを 捉えています 6分間歩行のメトリクスは 6分間でどのくらいの距離を 歩くことができるかを 推定するもので 歩行能力と持久力を測るものです 歩行安定性は 歩行の質を 表しており 運動能力に基づいて個人の 転倒リスクを 簡単に評価できるように 設計されています これらのメトリクスは 治療に対する変化を測定するために 週単位で追跡する場合でも 自然な加齢傾向をモニター するために 年単位で追跡する場合でも 個人の健康状態を把握する ユニークな手段となります まずは 6分間歩行の 距離メトリクスについて 深く掘り下げていきます クリニックで行われる 6分間歩行テストは 様々な分野の臨床医が 心血管や筋骨格の 健康状態を評価する際に 欠かせないものです このメトリクスは 歩行能力の低い人の 歩行持久力を表しています このメトリクスは 同年齢・同身長の人に 比べて持久力が低い人を 特定するのに役立ち しばしば健康状態の悪化を 示唆するものです 今年 新たな リキャリブレーションAPIを 使用して 6分間歩行メトリクスは 手術などの介入や 怪我のような急性の出来事の後の 歩行能力の変化を追跡するのにも 最適な方法です ここでは 6分間メトリクスの リキャリブレーションが 有効なシナリオを 説明します 膝の手術を受けたばかりの Jamieという患者が いるとします 手術後 Jamieは ほとんど歩けなかったことが 分かっていますが 6分間歩行の推定値がわずかに 下がっているだけです この原因が何かを考えてみましょう 個人の能力を 正確に推定するために 「6分間の歩行」の距離推定値は 過去の測定ウィンドウにおける 動作とモーションのデータを 調べます 例えば これはこの見積もりに 使用された測定ウィンドウです 推定値がどのくらい 過去のものであるかを 確認するには 全く新しいメタデータフィールド を使用します この例では 手術前のデータを 使用していることが分かります ここでできることは 手術後のデータのみを 使用できるように 推定値を再調整することです このリキャリブレーションにより 推定値は 手術後直後のJamieの モビリティの真の低下を 捉えることができ より正確な手術後の比較が 可能になります では これらの新機能を あなたのAppで どのように使うかソーハムに 教えてもらいましょう ありがとうイリダ! リキャリブレーションAPIでは Jamieの手術日の情報を使って 6分間歩行の距離予測を 改善することができます リキャリブレーションを行う場合は HKHealthStoreに 新しく追加された recalibrateEstimates メソッドを使用できます この新しいメソッドには いくつかの要件があります まず 必要なのは リキャリブレーションが可能な サンプルタイプです タイプがリキャリブレーション できるかどうかは .allowsRecalibration ForEstimatesプロパティで確認できます iOS 15では sixMinuteWalkType がリキャリブレーション可能な 唯一のサンプルタイプです 次に必要なのは 新しいエンタイトルメントです エンタイトルメントはXcode プロジェクトに追加できます 最後に あなたのAppは SampleTypeの読み込みと 共有の両方に承認が必要です ユーザーにAppの認証を促すには 「6分間歩行」という 距離タイプだけのセットを作成し それを healthStore.requestAuthorization に渡します これらの要件を満たした上で リキャリブレーションを 行いましょう HKHealthStoreの recalibrateEstimates メソッドを使って 手術日を渡すだけです これは患者の健康データに影響を 与えるため 画面上にリキャリブレーションを 許可するかどうかのプロンプトが 表示されます これで完了です 次の回数の推定では ヘルスケアAppの測定開始日と 全てのHealthKitサンプル に付属する EarliestDataUsed ForEstimate メタデータに リキャリブレーションの 日付が反映されます 考慮すべき点がいくつかあります この方法は 使用時に HealthKitに 既に存在している推定値には 影響しないため 手術後はできるだけ早く リキャリブレーションを 行うことが重要です 第2に リキャリブレーション後 自信をもって推定できるだけの 活動履歴を再構築するには 最大で14日かかる 可能性があります そして3つ目は その効果が 一時的であるということです リキャリブレーションの実施日から 十分な時間が経てば 推定値は再び 通常の測定ウィンドウを 使用するようになります 転倒や手術の度に リキャリブレーションしたくなる かもしれませんが これらは多くの場合 可動性や フィットネスの低下には つながりません トレードオフの関係にあります 一般的に データウィンドウが 長ければ より正確な推定値が得られますが 急激な変化への反応は 低くなります Jamieの場合 手術によって移動能力や体力に 大きな変化が生じる ことが分かっているので その変化を注意深く モニターしたいと考えています 順調に回復していない場合は 手を差し伸べてサポートする ことができます この新しいリキャリブレーション APIは Appleの「6分間歩行」という 距離メトリクスの機能を 怪我や手術からの回復を追跡する という 全く新しいユースケースにまで 拡張します 患者さんの健康状態を よりよく把握し 治療結果を改善するために 役立てていただければ幸いです それでは イリダに代わって 全く新しいメトリクスである 「歩行安定性」をご紹介します このメトリクスは あなたの 歩行の異なる側面を測定します ありがとうソーハム 個人の歩行量や距離を 把握できるだけでなく その動きの質をモニターすることも 重要です iOS 15では 歩行の質に 関する基本的な理解を更に深め 新しいメトリクスである Appleの「歩行安定性」 メトリクスを拡張しました このメトリクスは あなたの全体的な歩行の質を より良く理解するために 設計されており 今後1年間に移動能力の制限が 原因で 転倒するリスクを評価するのに 役立ちます 歩行の質は 筋力 持久力 バランス 怪我や手術などの 多くの外的要因に影響され これらすべてが転倒のリスクを 変える可能性があります Appleの「歩行安定性」 メトリクスは転倒のリスクに繋がる モビリティ要素を 統一的に追跡する方法を提供します この機能は3つの要素で 構成されています まず 歩行安定性の変化を 継続的に監視するためのスコアを 提供します 新しいスコアは毎週 HealthKitに保存され その週のユーザーの安定性を 表します スコアは 最も詳細なレベルで 提供されます スコアが高ければ高いほど 歩行の質が良く 移動の制限による転倒の 予測リスクが低くなります 次に 安定性スコアの意味を より良く理解していただくために 3つの分類に分けています 「OK」「低い」「非常に低い」 です この分類により 転倒のリスクが高い人を より簡単に特定することができます 最後に 個人がヘルスケアAppの 歩行安定性機能に 参加した後 通知を有効にしました この通知は 安定性が 「低い」または「非常に低い」 カテゴリーに低下した場合 あるいは数か月間これらの カテゴリーに留まっている場合に 個人にアラートを発します では 「健康な一般の人の生涯を 通しての安定性はどうだろう」 と疑問に思われるかもしれません ここでは 2人の人を対象に 「歩行安定性」のメトリクスを 見てみましょう この人は 加齢とともに 歩行の質が低下していきます これはかなり典型的なタイプです 私たちは 身内の高齢者が 私たちと同じようには歩くことが できないのを見てきました しかし 安定性に寄与する 行動上の要因が あることも知っています 例えば 高いレベルのフィットネス を維持できている人は 年齢を重ねても 高い歩行の質を維持できる 可能性があります しかし 歩行安定性に 影響を与える要因は 年齢や体力だけではないことも 分かっています 足首の怪我のような急性の出来事は 歩行の質を劇的に変化させ 転倒のリスクを高めます つまり 誰もが生涯を通じて 安定性のカテゴリ間を行き来する 可能性があるのです そして 先程述べたように 安定性の分類は これらの変化の 意味を 理解するのに役立ちます では これらの分類レベルの人が どのように見えるのか もう少し掘り下げてみましょう Okの人は健康で自信を持って 歩ける人です 一般的には 日常生活を送ることや 筋力や協調性を必要とすることも 多くの作業を行うことに 何の支障もありません スコアは高く 運動関連の健康問題による 転倒のリスクは低いと言えます 低いと分類された人は モビリティが低下しています 一般的には問題ないかもしれません しかし より困難な状況では-- 転倒を防ぐために さらに多くの予防措置を 講じる必要があるかもしれません まだ転倒していないかもしれませんが このような早期の認識が 役に立ちます 最後に 「非常に低い」に分類された人は 安定性が著しく低下していることを 示しています 動きやすさを考えると この人は転倒のリスクが 高いと言えます 繰り返しますが まだ 転倒していないかもしれませんが モビリティが損なわれているため 転倒が起こりやすい状況を 避けるために必要な措置を取るか 可能であれば 運動によって 筋力とバランスを 改善する必要があります よろしいですね これがこのメトリクスの能力です では「歩行安定性」の推定値を 得るためには 何が必要か と聞かれるかもしれません 実は あまり多くのものは 必要ありません この指標は iPhoneを ズボンのポケットや 上着のポケットあるいは 財布の中など 最も一般的な場所に入れて 歩いている時の安定性を 推測するように 最適化されています デバイスが体の中心にしっかりと 固定されていれば どれも問題ありません それでは次に ソーハムが Appで歩行安定性のメトリクスを 活用する方法を紹介します イリダ 「歩行安定性」の紹介を ありがとうございました では 実際に使ってみましょう あなたが理学療法クリニックの Appを作っているとします 理学療法やリハビリテーションに おける 最も困難な課題の1つは 進捗状況を追跡することです ほとんどの診察がバーチャルで 行われ 遠隔医療が普及している今 それはさらに困難になると 思われます 例えば あなたのAppの目的が 患者の最新情報を把握し 転倒のリスクが高い人や 安定性が低下している人を 特定することだとしましょう これを推測するのは 非常に難しいことですが 「歩行安定性」は その助けとなります イリダが述べたように 「歩行安定性」には 3つの要素があります 「スコア」「分類」「通知」です それぞれの要素を 理学療法士向けのAppに どのように組み込むことが できるのか まずはスコアから見ていきましょう 例えば 患者さんの最 最新の「歩行安定性」を 表示したいとしましょう その方法を見てみましょう スコアはHealthKitの 数量型で appleWalkingSteadiness という名前です こhれはAppleが定義した メトリクスで 読み取り専用です HealthKitでの単位は パーセントで 範囲は0から1までです 推定値を算出するのに十分な データがない場合は 推定値が遅れることもありますが 毎週書き込まれます はじめに 認証を取りましょう appleWalkingSteadiness型の セットを作ります そしてrequestAuthorizationを 呼び出します 最新の安定性スコアを 取得するために 終了日でソートされた 1つの制限を持つ SampleQueryを 構築します 返されたサンプルがあれば その値をパーセント単位で取得し App内のステータスを更新します このように表示されます スコアはトレンドを追うには 最適ですが それだけではちょっと 解釈が難しいこともあります 45は何を意味するのでしょうか? 多くの人にとって 分類はより適切な 単位であるかもしれません それを使ってコンテキストを 追加してみましょう この分類は まったく新しい HealthKit enumの形 で提供されます HKKAppleWalkingSteadiness Classificationです 列挙対は「.ok」「.low」「 .veryLow」の値を取ります 最新のスコアを取得する前のコード から始めると スコアを分類に変換するのに 1行しか必要ありません 分類列挙には スコアを適切な分類に 変換する便利な コンストラクタがあります そして スコアと一緒に 分類を表示します 見てください! 解釈の幅が広がりました この人は「低い」に分類されていて 転倒のリスクが 高いことが分かります さて 次はこのAppの 患者モニタリングの部分に 取り組んでみましょう 転倒リスクが高い患者さんを 特定し 手を差し伸べることができるように したいと思います 歩行安定性に関する通知は これに最適です 患者が安定性の通知を 受け取った時に 通知をうけるように登録して チェックインのために患者に 手を差し伸べることができます 通知はCategoryTypeの サンプルとして HealthKitでは 「appleWalkingSteadinessEvent」 と呼ばれています これもまた 読み取り専用のタイプです steadinessEvents には4つのタイプがあります .initialLowと initialVeryLowは 個人が「低い」または「非常に 低い」の分類に下がってから 1か月後に通知されます この最初の通知の後 .repeatLowまたは .repeatVeryLow イベントは 同じ分類に留まっている場合 約3か月に1回 その個人に通知します 通知の種類については この セッションに関連する リンク先の開発者向け ドキュメントで 詳しく説明されています 通知を読み取るためには 別の認証が必要になります 今回は appleWalkingSteadinessEvent というタイプだけのセットを作成し それを requestAuthorization メソッドに渡します 通知を見てみましょう ここでは 安定性のイベントが HealthKitに保存される度 つまり ユーザーが通知を 受けた時に ハンドラを実行する HKObserverQueryを 作成しています このハンドラでは ユーザーに 検診を促すようにします また HealthKitが バックグラウンドで イベントを配信することで 1日以内に通知に 対応できるようにしています クエリを実行すると Appは通知の受信を開始します そして ユーザーが 通知を受け取る度に クリニックとのバーチャル検診を 予約するためのプロンプトを トリガーすることができます いいですね これで 転倒リスクの 高い患者に連絡することができます しかし 理学療法クリニックが 興味を持つユーザーは他にもいます ここでは 最初は大きな進歩が 見られたにもかかわらず 現在は安定性が低下している 患者さんの例を紹介します この患者さんは まだ転倒リスクの 高い分類ではないので 歩行安定度の通知を 受けていないでしょう しかし 理学療法クリニックでは このような傾向を心配するかも しれません そのエクササイズは適切ですか? ダメージを与えていませんか? 患者さんは ただ単に ついていけていないだでしょうか? フォローアップを予定したいので 独自の通知基準を作りましょう この患者さんの長期にわたる 安定性スコアを示します 計画では 6週間分の 安定性スコアを紹介し スロープの最適な傾きを計算します これを毎週行い 患者の安定性が平均して 週に5ポイント以上 低下している場合は チェックインの予定を入れるように します 過去6週間分を照会する 述語を作成し appleWalkingSteadiness QuantityTypeの HKSammpleQueryを 実行してみましょう コールバックでは その結果を detectTrends関数に 渡します あとは 独自に定義した 関数を使って 最適の傾きを計算し それが-5より小さいかどうかを チェックするだけです これは 安定性が週に 5ポイント以上の割合で 低下していることを意味します 5未満であれば 以前のように ユーザーに検査を 促すことができます これで ユーザーの安定性が 低下していることを検知すると プロンプトが 表示されるようになりました 以上 「歩行安定性」の 3つの要素の使い方と 独自のシンプルな通知基準の 設定方法をご紹介しました パッシブモビリティモニタリングが これほど簡単にできる 時代はありません しかし 先走ってはいけません これらはすべて 患者が歩行安定性スコアを 取得しているかどうかによります ここでは 1つのサンプルも 見逃さないようにするための 4つのベストプラクティスを 紹介します まず ユーザーは ヘルスケアAppで 身長を設定している場合にのみ 安定性を取得します 体重と年齢は非常にお勧めです まず最初に それらを促すように しましょう 更新されたサンプルは HealthKit APIを介し 直接書き込むことをお勧めします 次に Appleの歩行安定性の通知を オンにするように ユーザーに促すことをお勧めします これは モビリティルームの ヘルスケアAppからできます 3つ目はイリダが述べたように 大多数の患者にとっては 日常生活を送る際に iPhoneをポケットに 入れておくだけで 十分に安定性スコアが 得られるということです 患者さんには iPhoneを持って 歩くことを進めましょう 歩行基準を満たしているかどうかを 確認するには HealthKitで 歩行速度の推定値を 受け取っているかどうかを チェックすればよいでしょう 歩行速度のサンプルが 安定している2週間は 彼らが十分にデバイスを持ち 歩いていることを示す良い指標です 注意点として 歩行速度は iPhone 8以上が必要で 平らな場所を歩きながら 体の中心にしっかりと 携帯電話を持った時に計測されます iPhoneを持って歩くように 促す必要があるかどうかは ヘルスケアAppを一目見るか HealthKitのクエリを 実行すれば分かります 以上 ご紹介しましたが いかがでしたか? これで 専用の機器や評価を必要とせずに 患者の歩行の質を追跡できる 次世代の理学療法Appを 構築するために 必要なツールがすべてそろいました それでは 歩行安定性を 健康管理に利用するための 多くの素晴らしい方法について イリダに話してもらいましょう ありがとうソーハム 今 歩行安定性が理学療法の ためのバーチャルケアに 大きな違いをもたらすことを 見てきましたが それ以外にも たくさんのことができます 高齢になった祖父母を 家族が見守るためのAppや 多発性硬化症などの 神経疾患の患者が 病気の進行を確認するための Appを作りたい場合は 「歩行安定性」の利用を 検討してみては いかがでしょうか? また 個人の転倒リスクに合わせた トレーニングや ハイキングを 推奨することもできます 「歩行安定性」と 「6分間歩行」の新機能は モーションセンサーを利用して 健康状態をモニターするための 豊富なエコシステム上に 構築されています モビリティと 心血管や呼吸器の機能との間には 強い関連性がある為 Apple Watchの心血管の 健康に関連するメトリクスや iPhoneのモビリティを リハビリテーションや プレハビリテーションの アプリケーションに利用して 患者が手術を成功させるための 最良の準備をする方法を 検討してみてはいかがでしょうか? また パーキンソン病の 複雑な運動症状を モニターするために 歩行安定性 モビリティメトリクス 運動障害APIを どのように組み合わせるかを 考えてみましょう これらのメトリクスを 組み合わせることで Appに真にパワフルな体験を もたらすことができます 最後に このデータを収集する際の ベストプラクティスをいくつか ご紹介します まず 歩くことは あまり意識しないことですが 先ほど見たように 歩くことには 重要な健康信号が含まれています 他の情報と同様に データ収集には 強力なプライバシーと セキュリティの保護手段が必要です HealthKit以外の場所でも 取得するデータは 少なくともキーコードと暗号化が 必要です 次に 収集している情報と その理由について 透明性を確保する必要があります 特定のHealthKitタイプの 読み取りを要求するときは いつでも その使用を承認するよう ユーザーに促します しかし この基本的な対策を超えて 最も意味のあるデータだけを収集し そのデータが どのように使用されるかを 透明化することは 私たちの共同責任です 例えば 6分間歩行の 推定値については リキャリブレーションがどのような 場合に適切で それがどのように ケアに役立つのかをユーザーに 理解してもらう必要があります 歩行安定性の指標については 推定値を得るための要件を 明確に伝える必要があります 医師や理学療法士などの専門家と 強力することで これらの測定基準から 最も意味のあるデータを 収集することができます 最後に お客様は自分のデータを コントロールする必要があります HealthKitでは 個人は 「すべてのデータを表示」を タップして 自分から収集した 全てのサンプルを削除できます HealthKit以外の場所で データを取得する場合 お客様は簡単に表示、削除したり データ収集をオフにしたり 自分から収集された データをコントロールするための その他の手段を用意する 必要があります 運動の質を測定するために 「歩行安定性」を 使用する場合でも 怪我からの回復を評価するために 6分間歩行のメトリクスを 使用する場合でも その他の健康指標を 使用する場合でも お客様のデータを保護し ユーザーの信頼を 高めることができます 健康に関するデータを 取り扱う際には これらの原則を守ることが 不可欠です さて これで終わりにします WWDC21をご覧いただき ご参加いただいた皆様に 感謝いたします 皆さんが次に何を作るのか 楽しみにしております ♪
-
-
0:01 - Grab authorization to read and share sixMinuteWalkTestDistance type
// Grab authorization to read and share sixMinuteWalkTestDistance type let healthStore = HKHealthStore() let types: Set = [ HKObjectType.quantityType(forIdentifier: .sixMinuteWalkTestDistance)! ] healthStore.requestAuthorization(toShare: types, read: types) { _, _ in }
-
0:02 - Recalibrate Six-Minute Walk estimates
// Recalibrate estimate let healthStore = HKHealthStore() let sixMinuteWalkType = HKSampleType.quantityType(forIdentifier: .sixMinuteWalkTestDistance)! if sixMinuteWalkType.allowsRecalibrationForEstimates { healthStore.recalibrateEstimates(sampleType: sixMinuteWalkType, date: surgeryDate) { (success, error) in // Handle error } }
-
0:03 - Get authorized for walkingSteadiness type
// Get authorized let types: Set = [ HKObjectType.quantityType(forIdentifier: .walkingSteadiness)! ] healthKitStore.requestAuthorization(toShare: nil, read: types) { _, _ in }
-
0:04 - Construct a query for most recent walkingSteadiness score
// Construct a query for most recent walkingSteadiness score let steadinessType = HKObjectType.quantityType(forIdentifier: .walkingSteadiness) let sortByEndDate = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false) let query = HKSampleQuery(sampleType: steadinessType, predicate: nil, limit: 1, sortDescriptors: [sortByEndDate]) { (query, samples, error) in if let sample = samples?.first as? HKQuantitySample{ let recentScore = sample.quantity.doubleValue(forUnit: .percentUnit) updateStatus(score: recentScore) } } self.healthStore.execute(query)
-
0:05 - Construct a query for most recent walkingSteadiness classification
// Construct a query for most recent walkingSteadiness classification let steadinessType = HKObjectType.quantityType(forIdentifier: .walkingSteadiness) let query = HKSampleQuery(sampleType: steadinessType, predicate: nil, limit: 1, sortDescriptors: nil) { (query, samples, error) in if let sample = samples?.first as? HKQuantitySample{ let recentScore = sample.quantity.doubleValue(forUnit: .percentUnit) // Use HealthKit API to classify a value as OK, Low, or Very Low let recentClassification = HKAppleWalkingSteadinessClassification(for: walkingSteadiness.quantity) updateStatus(classification: recentClassification, score: recentScore) } } self.healthStore.execute(query)
-
0:06 - Get authorized .walkingSteadinessEvent
// Get authorized let types: Set = [ HKObjectType.categoryType(forIdentifier: .walkingSteadinessEvent)! ] healthKitStore.requestAuthorization(toShare: nil, read: types) { _, _ in }
-
0:07 - Watch for walkingSteadiness notifications
// Watch for walkingSteadiness notifications let notificationType = HKCategoryType.categoryType(forIdentifier: .appleWalkingSteadinessEvent)! let query = HKObserverQuery(sampleType: notificationType, predicate: nil) { (query, completionHandler, errorOrNil) in if let error = errorOrNil { // Properly handle the error. return } promptCheckupForNotification() completionHandler() } self.healthStore.execute(query)
-
0:08 - Query walking steadiness in the past 6 weeks
// Query samples from HealthKit // Look back 6 weeks let end = Date() let start = Calendar.current.date(byAdding: .week, value: -6, to: end) let datePredicate = HKQuery.predicateForSamples(withStart: start, end: end, options: []) // Query walking steadiness let steadinessType = HKObjectType.quantityType(forIdentifier: .walkingSteadiness) let sortByEndDate = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false) let query = HKSampleQuery(sampleType: steadinessType, predicate: sortByEndDate, limit: nil, sortDescriptors:[sortByEndDate]) { (_, samples, _) in detectTrends(samples) } self.healthStore.execute(query)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。