SwiftUI HealthKitでウォーキングアプリに必要な機能を実装しましょう
iPhoneやApple Watchでは、ウォーキングやランニング時の自分の歩幅をわかるようになってきました。
Apple Watchがどんどん進化をしているため、これらの機能を使ってアプリを作っていきましょう。
WWDCでは、iPhoneとApple Watchを連携させる方法などが紹介されていますので、ぜひ勉強して習得してアプリをリリースしましょう。
SwiftUI HealthKitでウォーキングアプリを実装する
モチベーションを上げる機能
・アプリを毎日開いて毎日アプリの画面を見て成果を確認できる機能
(TOTALどのくらいの距離を走ったのか?)
・成果を達成するとコインをゲットできる機能
・どこの場所を走ったのかウォーキング、ランニング記録が地図上でわかる。
効果を最大限にする機能
・一日当り10kmの距離を目標に走る。10km当りのスピードを計測できる。
・10km走った後の筋トレのメニューを提案することができる。(腕立て、腹筋、背筋、スクワッドなど)
達成した目標を得られる機能
・目標を達成したことにより得られたコインで、商品と交換することができる機能
PS5とか任天堂Switchとかが嬉しいと思うが、プレゼントとすると商品交換の法律などがありそうなので調べる必要あり。まずはポイントを元に、購入するという形で実現する。
WWDCのビデオでHealthKitの概要を把握する。
ヘルスとフィットネスのアプリを作るための勉強をしましょう。
HealthKitをXcodeに取り込み
Getting started with HealthKit
HealthKit は、サードパーティのアプリ、iPhone、Apple Watch、および外部の健康デバイスからの健康データを一元化することで、世界クラスの健康およびフィットネス アプリを構築するのに役立ちます。Health データに関する承認とプライバシーを管理し、共有 Health Store に対してデータを読み書きし、HealthKit の組み込みクエリを使用してデータをフェッチし、そのデータの統計を計算する方法を発見してください。
こんにちは、WWDC へようこそ。皆さんこんにちは。私の名前は Dina です。
私はここ Apple の iOS エンジニアです。今日は、HealthKit を紹介し、最初の健康アプリケーションの作成を開始できるようにします。私たち自身の健康データは、私たちが誰であるかの最も個人的な部分の一部を構成しています。
それは、月経周期や妊娠するための生殖能力の追跡、または医師の予約からのラボテストの結果、そして今朝 Apple で完了したワークアウトでさえもです。
時計。すぐにアクセス 00:00:33.706 –> 00:00:37.906 私たち自身の健康データへのアクセスは、現代のテクノロジーの最も強力な開発の 1 つです。
今日、App Store には 18,000 を超えるアプリケーションがあり、そのすべてが健康とフィットネスの改善に焦点を当てています。それは驚くべきことです。真剣に、それは驚くべきことです。
今日、自宅でトレーニングを提供して自宅でフィットネスの目標を達成するのに役立つアプリケーションがあり、月経周期と生殖能力を追跡し、さらには目標の体重に到達するのに役立つように食べる食品を記録することさえできます。
今日、私たちの健康を管理するのに役立つさまざまなアプリケーションが利用可能です。これらのアプリケーションはすべて、HealthKit を基盤として構築されています。
HealthKit は、すべてのユーザーの健康データの中央リポジトリを作成するフレームワークであり、アプリケーションがそこからデータを読み取ったり、データを提供したりできるようにします。それは、最もシームレスなユーザー エクスペリエンスを作成するのに役立ちます。
iPhone、Apple Watch、さらにはiCloudなど、複数のデバイスで健康データを操作できます。HealthKit は、これらのデバイス間ですべての健康データを安全に保存および同期するため、開発者はその処理について心配する必要はありません。
また、HealthKit は、アプリケーションがアクセスできるデータを明示的に制御できるようにすることで、ユーザーのプライバシーを保護します。HealthKit は、健康データを保護しながら、よりシームレスな健康アプリケーションを作成するのに役立つフレームワークです。
今日は、SmoothWalker という HealthKit を使用して独自のアプリケーションを構築することで、この健全なコミュニティに参加します。その名前のように、このアプリケーションの目的は、これまでの散歩を記録し、過去 1 週間の毎日の歩数を視覚的に確認できるようにすることです。
SmoothWalker を構築するには、3 つの異なるタスクを完了する必要があります。最初の 1 つは、xCode プロジェクトで HealthKit をセットアップすることです。
実行したら、データの保存を開始できます。具体的には、歩いた距離です。
最後に、データを読み取って、過去 1 週間の毎日の歩数をアプリケーションに表示できます。
HealthKit をセットアップするには、いくつかの異なるタスクを完了する必要があります。
最初のタスクは、Xcode プロジェクトでHealthKit 機能を有効にする必要があることです。
完了したら、次のことを確認する必要があります。実行しているプラットフォームが HealthKit をサポートしていないか。
最後に、HealthKit API へのエントリ ポイントである HKHealthStore を作成します。
アプリケーションで HealthKit 機能を有効にするには、ユーザーの健康データを統合するターゲットを選択します。
「Signing & Capabilities」をタップし、「+ Capability」ボタンを押します。「HealthKit」と入力すると、すぐに HealthKit フレームワークがアプリケーションに追加されます。これにより、ユーザーの健康情報を取得して保存できるようになります。
実行しているプラットフォームが HealthKit をサポートしているかどうかを確認する必要があります。これは、複数のプラットフォームまたはオペレーティングシステムで動作するため、現在実行しているプラットフォームが HealthKit をサポートしているかどうかを確認する必要があります。
HealthKit をインポートする必要があります。
次に、HKHealthStore を使用して、ヘルスデータが利用可能かどうかを確認します。利用できるようであれば、引き続きユーザーの健康データをアプリケーションに統合できます。そうでない場合は、ユーザーの健康データがなくてもアプリケーションが動作できることを確認してください。
最後に、HKHealthStore を作成します。HKHealthStoreは、健康データの世界へのゲートウェイまたはポータルであると私は考えています。
これは、ユーザーの健康データへのアクセスを要求するときに使用するものです。これは、データを保存する方法であり、クエリを使用してデータを読み取る方法でもあります。
インスタンスを 1 つ作成するだけで、アプリケーションのライフサイクル全体で再利用できます。複数のインスタンスを作成する必要はありません。ここには、アプリケーション全体で使用する HealthStore オブジェクトがあり、健康データが利用可能な場合は、HealthStore オブジェクトをインスタンス化します。そして、HealthKit のセットアップはとても簡単です
HealthKit 機能を有効にし、プラットフォームが HealthKit をサポートしているかどうかを確認し、HKHealthStore を作成します。
それはあなたがする必要があるすべてです。
HealthKit のセットアップが完了したので、データの保存に移りましょう。
具体的には、ログに記録した距離です。ただし、その前に、HealthKit がデータをどのように整理および構造化するかを詳しく調べる必要があります。
私は、プレゼンテーションや講演の直前に、ちょっとした運動をするのが好きな、この小さな習慣を持っています。それは私のエネルギーを高め、神経を落ち着かせるのにも役立ちます。
数回の腕立て伏せや数回のスプリントで直せないものは何もありません。それが、このプレゼンテーションの直前に私が行ったことです。早速トレーニングを行いました。
それでは、ワークアウト中に記録されたすべての健康データを見てみましょう。トレーニングのために、今日は午後 2 時 35 分から午後 3 時まで散歩に行きました。
天気が良かったので外を歩きました…部分的に曇り、湿度が低い… 良い髪の日には最高です。
私が歩いたのは628メートルで、Apple MusicでLizzoとRico Nastyを少し大声で爆破していたので、聴覚の健康を維持するために音量を下げる必要があります。
散歩を始めて 5 分後、生理がもうすぐ始まるという事実のために、軽度の腹部痙攣にも気付き始めました。これらのさまざまな種類の健康データはすべて、健康サンプルとして保存されます
ヘルス サンプルはすべて、非常によく似たパターンで構成されています。それらはすべて、それらが表す関連するデータのタイプ、そのタイプのデータの値、これらの健康イベントが発生した時間、および保存したい追加情報を表すメタデータを持っています。
これらのサンプル – ワークアウトが屋外か屋内か、屋外の天気、それを記録したデバイス、さらにはそれを書き込んだアプリケーションなどです。これらの異なるタイプのデータはすべてサンプルとして保存されるため、それらすべての間にいくつかのニュアンスの違いがあります。
ここでは、Quantity Samples と呼ばれる 1 つのタイプのサンプルに焦点を当てます。Quantity Samplesには、健康データに関連付けられた数値と単位が保存されます。
これは、歩く距離とヘッドホンのオーディオ レベルの露出を保存するのに最適です。タイプに関係なく、私たちは常にデータを管理したいと考えています。
そのために、HealthKit には認証システムがあり、これにより、次のことが可能になります。特定のデータ型によるユーザーの健康データの承認を要求します。
また、アプリケーションがアクセスできるデータをユーザーが最大限に制御できるようにするために、読み取りアクセス許可と書き込みアクセス許可は別々に処理されます。
そのため、ユーザーは、要求したデータの機密性と、何を共有してよいかによって、許可を与える場合と与えない場合があります。承認を要求するたびに、右側の画面がユーザーに表示される場合があります。これは HealthKit の認証シートです。
これにより、ユーザーは、アクセスを要求しているデータへのアクセス許可を付与または拒否できます。そのため、コンテキストで承認を要求することが重要です。
画面が何であるか、およびこのアプリケーションが健康データにアクセスする必要がある理由を理解する。アプリケーションのInfo.plist で、Health Update Usage Description と Health Share Usage Descriptionの 2 つのキーを定義する必要があります。
これにより、アプリケーションの機能と、アプリケーションがユーザーの健康データとどのようにやり取りするかを簡単に説明できます。
コンテキストのもう 1 つの重要な部分は、適切なタイミングで承認を要求することです。ユーザーの健康データを操作する場合はいつでも、それが健康データの保存または読み取りであっても、承認を要求してください。
オンボーディングは、承認を要求するもう 1 つの優れた場所でもあります。アプリケーションが何をするか、エクスペリエンスでヘルス データをどのように使用するかを理解している必要があります。状況に応じて承認を要求することは非常に重要であるため、ユーザーにとって最高のエクスペリエンスを作成するために必要なデータのみに対して承認を要求するようにしてください。
たとえば、HealthKit のすべてのデータ型 (ちなみに、100 をはるかに超えています) の承認を要求した場合、ユーザーは、水泳のトレーニングを実行するのに役立つアプリケーションがすべてのデータ型も要求する理由について、少し混乱する可能性があります。
歯磨きの時間。つまり、歯を磨きながら泳ぐ、本当にニッチなアスリートのグループを攻撃している可能性があるということです。
しかし、私は少し懐疑的です。最後に、ユーザーの健康データを操作するたびに承認を要求します。ユーザーのアクセス許可に関しては、HealthKit が信頼できる情報源であり、ユーザーのアクセス許可はアプリケーションの外部でいつでも変更される可能性があるため、アプリケーションが最新の状態に保たれるように、必ず承認を要求してください。
今日のワークアウト中に歩いた距離を保存するには、まず、HealthKit の承認システムを使用して、歩行距離データ型への書き込みアクセスを要求する必要があります。
完了したら、徒歩距離のサンプルを作成し、HealthStore を使用してそのサンプルを保存する必要があります。書き込みアクセスをリクエストするには、何をする必要がありますか書き込みアクセスが必要なデータの種類を見つけることです。
この場合、これはただの distanceWalkingRunning 数量タイプです。次に、HealthStore でリクエスト承認メソッドを呼び出し、書き込みおよび読み取り対象のデータを渡します。
SmoothWalker では、歩いた距離だけを書き込んでいます。私たちはそのデータを読んでいません。したがって、書き込みアクセスのみを要求します。
最後に、完了ハンドラーで承認を正常に要求したかどうかがわかります。この場合の成功は、ユーザーがこれらのデータ型に許可を与えたことを意味するものではありません。これは、承認のリクエストが成功したことを意味し、承認が失敗した場合は、いつでも再試行できます。
機密性の高い健康データに関しては、ユーザーのプライバシーは非常に重要であるため、承認を要求する際は、必要なときに必要なものだけを要求するようにしてください。
書き込みアクセスの要求が完了したので、ワークアウト中に歩く距離を表すサンプルを作成し、HealthStore を使用してそのサンプルを保存するという最後の 2 つのタスクに進みましょう。
保存したいデータのタイプを定義する必要があります。これは、数量タイプの distanceWalkingRunning であり、書き込みアクセスを要求したのと同じ数量タイプです。
次に、その距離を歩いたときの開始時刻と終了時刻をインスタンス化する必要があります。この場合は今日の午後2時35分と午後3時。HealthKit のすべての数量サンプルは、関連付けられた HKQuantity と共に保存されます。
HKQuantities は、サンプルに関連付けられた値と単位を表します。つまり、今日の散歩から628 メートルの距離を歩きました。HealthKit の非常に強力な部分は、異なる単位間で変換できることです。
したがって、たとえば、あるアプリケーションではメートル単位で、別のアプリケーションではヤード単位で歩いたすべての距離を確認したい場合、HealthKit は同じデータセットでそのすべての変換を行うことができるので、あなたが行う必要はありません。その手動計算のいずれか。サンプルを作成するために必要なすべての部品が揃っています。
作成したいデータのタイプを渡します。これは、distanceWalkingRunning 量です。タイプ、数量 628 メートル、開始日と終了日は今日の午後 2 時 35 分と午後 3 時です。
最後に、HealthStore で save メソッドを呼び出してサンプルを渡します。これにより、完了ハンドラーを介してサンプルがデータベースに正常に保存されたかどうかがわかります。それだけで、ワークアウト中に歩いた距離を節約できました。Quantity Samples がどのように構造化され、HealthKit に保存されるかを詳しく調べました。
しかし、私たちのすべてのデータが、私のワークアウトや今日の腹部痙攣などの量のサンプルで必ずしも最適に表現されているわけではありません. それでは、 HealthKit がデータをより一般的な方法で整理する方法を詳しく見てみましょう。繰り返しますが、関連する数値と単位を格納する Quantity Samples があります。私たちの健康データと一緒に – 歩いた距離とヘッドフォンのオーディオ レベルの露出を保存するのに最適です。
ただし、私の健康データのすべてが必ずしも定量的であるとは限りません。一部はより定性的なもので、HealthKit にカテゴリ サンプルとして保存されます。記録できる値は事前定義されたリストから取得され、単位はありません。たとえば、今日軽度の腹部痙攣を記録するとき、軽度、中等度、重度のいずれであるかを記録するオプションがあり、ありがたいことに軽度でした。
これらのタイプのサンプルは両方とも特異値を表しますが、すべての健康データが、私のワークアウトのような HealthKit で必ずしもそのように表されるわけではありません。複数の値であり、集計する値に応じて複数の単位を運ぶことができます。今日のワークアウトのように、歩いた 628メートル、登った 3 回のフライト、さらには105 カロリーを消費しました。
これらのさまざまな種類のデータはすべて、HealthKit のサンプルです。すべてのサンプルには、これらのヘルス イベントが発生した開始時刻と終了時刻が関連付けられています。
量のサンプル、カテゴリのサンプル、およびワークアウトを見たので、より多くの異なる種類のサンプルが利用可能であり、調べることをお勧めします。
サンプルのように時間の経過とともに変化しますが、すべての健康データが変化するわけではありません。誕生日や血液型など、私たちの健康データの一部は、生涯にわたってより静的なままです。これらはHealthKit に特性として保存されます。
これらのさまざまな種類のオブジェクトはすべて HKObject の下に統合されており、HKObject にはデータの一意の識別子が関連付けられているため、簡単に参照でき、それを記録したデバイス、さらにはそれを書き込んだアプリケーションさえも参照できます。
この階層は、HealthKit に格納されているオブジェクトを表します。HealthKit には、すべての型の並列階層もあります。
たとえば、今日私が歩いた距離は、量の種類が distanceWalkingRunning の量のサンプルとして格納されていました。
私の軽度の腹部けいれんは、カテゴリ タイプ腹部けいれんのカテゴリ サンプルに保存されました。
HealthKit がデータをどのように整理および構造化するかを調べました。
それでは、データを読み取る最後の 3 番目のタスクに移りましょう。健康データの読み取りに関しては、クエリを使用する必要があります。HealthKit には、手元にあるタスクを達成するのに役立つ幅広いクエリがあります。ここに多くのいくつかがあります。
今日は、 HKStatisticsQuery、HKStatisticsCollectionQuery、HKSampleQueryの 3 つを見ていきます。クエリを使用する場合、最初に行う必要があるのは、クエリ オブジェクトを作成することです。読み取るデータの種類を定義し、クエリから返される結果を制限するフィルターを指定する必要があります。
これは、述語を定義することによって行われます。述語は、フィルタリングによってクエリの効率とパフォーマンスを大幅に向上させることができます返される結果を取り出します。最後に、 HealthStore でクエリを実行し、ハンドラーから結果を取得します。最初に調べるクエリは HKStatisticsQuery で、まさにその名前のとおりです。
これは、サンプル、特に数量サンプルの統計を実行するクエリです。HKStatisticsQueryで計算できる統計の種類を見てみましょう。たとえば、ワークアウト中に行った総歩数や消費カロリーの総量を知りたい場合があります。
もし私が特に勇気があれば、今日消費したカフェインの総量を知りたいと思うかもしれません.これは抹茶ラテ中毒を明らかにするかもしれません。
それは我慢しようと思います。これらの異なるデータ型の合計を計算することはできますが、すべての健康データを合計することは意味がありません。
たとえば、SPF 50 とシェードで完全に保護されているかどうかを知るために、今日の平均 UV 露出を知りたい場合や、激しいワークアウトが安静時の最小心拍数に実際に影響を与えているかどうかを知りたい場合があります。
数週間前に病気になったときの最高体温さえ知っています。また、健康データの平均最小値と最大値を計算することもできます。すべての体温を合計したり、ワークアウト中に消費した平均カロリーを計算したりすることは意味がありません。
したがって、計算できる統計の種類は、私たちの健康に関する最も洞察に満ちた情報を明らかにするもの。これは、HealthKit のサンプルの集計スタイルとして知られています。
ここでは、実行した合計歩数と消費カロリーがすべて累積されますが、UV曝露と心拍数は離散的です。今日は、6 月 15 日から今日までの 1 週間の総歩数を知りたいです。これが先週の私のすべてのステップです。これから行うことは、計算する統計の種類 (累積合計) を指定する HKStatisticsQuery を作成することです。
これを HealthStore で実行すると、 HKStatistics オブジェクトが返されます。これには、統計を構成するすべてのサンプルの開始日と終了日、および合計 6,902 が含まれます。ステップ。それだけじゃない。
私はおそらく、今後の活動を本当に強化する必要があります。これらのサンプルはすべて Apple Watch で録音されたものですが、散歩に行くときは、電話を数回かける必要がある場合に備えて、iPhone を持ち歩くこともあります。Apple Watch と iPhone の両方が歩数を記録しています。
すべてのデバイスのすべてのステップを合計すると、それらのステップの多くを簡単に二重にカウントすることになります。
HKStatisticsQueryは、データの重複排除に役立ちます。たとえば、6 月 15 日に HKStatisticsQueryは私の iPhone に記録された 900 歩を無視しますが、それは重複データになるためです。
そのため、HKStatisticsQuery を構築し、それを HealthStore で実行して、更新された HKStatistics オブジェクトを新しい合計 8002ステップで取得します。
だから私はもっとうまくやったが、それほどではなかった. 毎日の歩数のパターンにもっと興味があります。自分のとった行動を知りたい過去 1 週間の毎日。私たちができることは、曜日ごとに HKStatisticsQueries を構築することです。それはそれらの7つになります。今のところはそれで問題ないかもしれませんが、過去 1 年間の毎日の歩数を知りたい場合は、管理する HKStatisticsQueries が 300 をはるかに超えてしまい、多すぎます。
HealthKit には解決策があります。これはHKStatisticsCollectionQuery と呼ばれ、指定した一定の時間間隔で統計を実行するクエリです。この場合、歩数の合計を計算する日ごとのリズムを指定します。また、統計の計算がいつ開始され、サンプルがどのようにバケット化されるかを表すアンカー日付も指定する必要があります。
私が自分のHKStatisticsCollectionQuery では、6 月 15 日の午前 0 時のアンカー、毎日のケイデンスの時間間隔、および計算する統計(合計) を指定します。これを HealthStore で実行すると、HKStatisticsCollection オブジェクトが返されます。HKStatisticsCollection オブジェクトはまさにその名の通りです。HKStatistics のコレクションです。
したがって、曜日ごとに、歩数の合計を含む HKStatistics オブジェクトを取得します。したがって、6 月 15 日の月曜日の合計歩数は 2,222歩になります。火曜日、私は嘘をつくつもりはありません。私はとても怠け者でした…ベッドから起き上がることさえできなかったので、何もしませんでした。水曜日、歩数の合計が 1,100 であるため、HKStatistics オブジェクトを取得します。合計は 1,100 で、残りはこれに従います。
以下は、すべて HKStatisticsCollectionQueries によって強化された Health の多くのグラフの一部です。1 つのクエリで、私たちの健康に関する有用で洞察力に富んだ情報が明らかになるのを見ると、信じられないほどです。HKStatisticsCollectionQuery は非常に強力です。他の超能力の 1 つに触れたいと思います。ユーザーの健康データの更新をリッスンできます。
そのためには、クエリを実行する前に更新ハンドラを設定する必要があります。そうすれば、クエリはバックグラウンドで実行され、健康データベースに入る新しい統計や新しいデータをリッスンします。これで、クエリはバックグラウンドで無期限に実行されるので、必要なすべてのデータの収集が完了したら、確実に stop を呼び出すようにします。
それでは、HKStatisticsCollectionQuery と SmoothWalker を使用して、過去 1 週間の毎日の歩数を表示しましょう。最初に行う必要があるのは、HKStatisticsCollectionQuery の作成です。完了したら、それを HealthStore で実行し、返されたHKStatisticsCollection オブジェクトで UI を更新します。デモに移りましょう。これから紹介するすべてのコードは、サンプルの Xcode プロジェクトを通じてオンラインで入手でき、ダウンロードして試してみることができます。
ここでは、画面の左側にあるシミュレーターで SmoothWalker を実行しています。私たちが持っていないので、ビューは今空です私たちの毎日の歩数。右上隅には、今日の新しいステップを追加できるデータ追加ボタンもあります。それでは、Xcode プロジェクトに移り、毎日のステップを表示するために必要なすべての要素を実装しましょう。
ここで私はDailyStepCountTableViewController にいます。これは、現在シミュレーターでビューを動かしているビュー コントローラーです。テーブル ビューに接続された配列があるので、毎日の歩数を読み取り、それを配列に入力するだけです。
ただし、最初に行う必要があるのは、歩数データへの読み取りおよび書き込みアクセスを要求することです。適切なコンテキストがある場合は、承認をリクエストする必要があります。素晴らしい場所これを行うには、メソッド viewWillAppear を使用します。そうすれば、アプリケーションが読み込まれるか、その歩数タブを押すと、承認シートが表示されます。それでは、先に進みましょう。
ここで、読み取りおよび書き込みアクセスが必要なデータのタイプを定義します。これが stepCount データ型です。次に、HealthStore を使用して承認を要求し、書き込みおよび読み取り対象のデータを渡します。承認のリクエストに成功したら、calculateDailyStepCountForPastWeek メソッドを呼び出します。これは、すべての魔法が起こる方法です。ここで毎日の歩数を読み、UI を更新します。それでは、この方法に進みましょう。
ここで、calculateDailyStepCountForPastWeek にいます。HKStatisticsCollectionQueryを構築し、HealthStore でクエリを実行し、結果で UI を更新する必要があります。最初に行う必要があるのは、読み取りたいデータの種類 (この場合は歩数データ)など、クエリを作成するために必要なすべての要素を定義することです。月曜日の午前 3 時のアンカーが必要です
私たちの時間間隔は、毎日のリズムです。HealthKitには多くの歩数データが存在する可能性がありますが、過去 1 週間分の統計を計算することにのみ関心があるため、述語を定義します。そうすれば、過去 1 週間分のステップ サンプルの統計のみを計算できます。
ここでは、1 週間前の日付を定義し、HKQuery の predicateForSamples を使用して述語を作成します。クエリを作成するために必要なすべてのコンポーネントがあります。それでは、先に進みましょう。ここでは、HKStatisticsCollectionQueryに、読み取りたいデータの種類を渡します。これは、歩数データ、1 週間前の述語、計算する統計(合計)、月曜日のアンカー、時間です。毎日のケイデンスの間隔。
クエリを作成したので、返された結果で UI を更新する必要があります。ここに initialResultsHandler があります。クエリの実行が完了すると、statisticsCollection が返され、健康データの読み取りに問題があった場合はエラーが返されます。ここで、UI を更新します。
テーブル ビューに表示する統計がある場合は、メソッドupdateUIFromStatistics を呼び出します。ここで、statisticsCollection を渡し、テーブル ビューをサポートする配列を更新します。それでは、このメソッドに取り掛かり、実装してみましょう。
ここで updateUIFromStatistics にいます。これは statisticsCollectionオブジェクトを使用するため、すべての統計を列挙し、それをテーブル ビューをサポートする配列に追加します。UI を更新するので、必ずメイン スレッドにディスパッチする必要があります。
これは、テーブル ビューと UI をサポートする配列です。HKStatistics の配列です。ここで行う必要があるのは、statisticsCollection オブジェクトで過去 1 週間の統計を列挙することです。1 週間前の開始日を定義し、今日まで列挙します。次に、statisticsCollection で enumerateStatistics メソッドを呼び出します。私たちのテーブルビュー。
最後に、列挙が完了したら、reloadData を呼び出します。これにより、テーブル ビューが更新され、UI が更新されます。最後に行う必要があるのはクエリの実行です。そのため、calculateDailyStepCountForPastWeek メソッドに戻り、最初の結果ハンドラーを設定した後にクエリを実行します。
それで、実行を押して、何が起こるか見てみましょう。
ああ。認証シートがデバイスに表示されました。これにより、SmoothWalker の歩数データを拒否または許可することができます。私は歩数データに特に敏感ではないので、読み取りと書き込みの両方のアクセスを有効にします。「すべてのカテゴリをオンにする」を押して、「許可」ボタンを押します。
ああ。また、テーブル ビューは、過去1 週間のすべての毎日の歩数で更新されました。それでは、今日のデータを追加してみましょう。800ステップを追加して、[追加] ボタンをクリックします。ご覧のとおり、テーブル ビューは更新されませんでした。これは、クエリに更新ハンドラを設定していないためです。それでは、Xcode に戻り、更新ハンドラを設定しましょう。そうすれば、クエリはバックグラウンドで実行され、新しい健康データや新しいステップが入ってくるのをリッスンします。メソッドcalculateDailyStepCountForPastWeekで更新ハンドラーを設定します。クエリを実行する前に、更新ハンドラを設定する必要があります。
そこでやります。ここに、statisticsUpdateHandler があります。
これは、データベースに入ってくる新しいデータがある場合、または新しい統計がある場合に呼び出されます。データの読み取りに問題がある場合は、新しい統計、statisticsCollection オブジェクト、およびエラーが返されます。ここでUI を更新し、最初の結果ハンドラーで行ったのと同じメソッドを呼び出します。
これで、クエリはバックグラウンドで無期限に実行され、データベースに追加される新しいステップをリッスンするため、必要なすべてのデータの収集が完了したら必ず stop を呼び出す必要があります。これを行うのに最適な場所は、メソッド viewWillDisappear です。そうすれば、ビューがデバイスに表示されなくなったときにクエリが停止します。それでは、先に進んでそれを実装しましょう。
ここで、WillDisappear が表示されます。このメソッドでクエリを停止します。
それでは、もう一度実行して、今日の新しいステップを追加するとどうなるか見てみましょう。データを追加します。235ステップを追加します。テーブル ビューは、その新しいステップ数で更新されました。これで、アプリケーションでの毎日の歩数の表示が完了しました。今やったことを見てみましょう。HKStatisticsCollectionQueryを作成し、それを HealthStore で実行し、statisticsCollection オブジェクトで UI を更新しました。HKStatisticsQueryと HKStatisticsCollectionQuery を見てみました。
彼らは超強力です。ただし、常に健康データの統計を計算したいわけではなく、すべての健康データが定量的であるとは限りません。HKSampleQuery を使用して、データベースに保存されている未加工の健康サンプルを取得します。
それでは、それを行う方法を見てみましょう。ここで、読みたいデータのタイプを定義します。これはワークアウトです。次に、クエリから返されたすべてのオブジェクトを並べ替える並べ替えを定義します。この場合、最後に終了した日付から並べ替えます。最後に、サンプル クエリを作成し、読み取りたいデータの種類、nil である述語、1 の制限 (最新の 1 つのワークアウトのみに関心があるため)、および並べ替えを渡します。
最後に、HealthStore を使用してクエリを実行します。HealthKit には、他にもさまざまな種類のクエリが用意されています。目の前のタスクを達成します。ユーザーのデータベースの変更を追跡できるHKAnchoredObjectQuery があります。HKActivitySummaryQueryもあります。これにより、Apple Watch から豊富なアクティビティ リング データを表示できます。HKWorkoutRouteQuery もあり、屋外でのワークアウト中に訪れたすべての場所が表示されます。
以上で、HealthKit の SmoothWalker への統合が完了しました。今日はたくさん話し合った。
より大きなポイントのいくつかを検討したいと思います。HealthKit は、ユーザーの健康データの中央リポジトリを作成および管理するのに役立つフレームワークであり、健康アプリケーションに豊富なエコシステムを提供します。
ただし、健康データはデバイス上で最も機密性の高いデータの一部を構成しているため、必要なデータのみの承認を要求するようにしてください。必要なときに。毎回。
HealthKit には、健康データの整理と構造化に役立つ豊富な型システムがあります。量の種類、カテゴリの種類、さらにはワークアウトについても調べましたが、他にも多くの種類があり、健康への応用に最適なものを確認することをお勧めします。
HealthKit には、データを効率的かつ効率的に読み取るのに役立つさまざまなクエリがあります。今日はサンプル クエリと統計クエリを見てきましたが、次の優れた健康アプリケーションの作成に役立つものが他にもたくさんあります。ここAppleの健康コミュニティに参加して、ユーザーが自分の健康を管理する方法に革命をもたらす素晴らしい健康アプリケーションをあなたが構築するのを見て、私たちはとても興奮しています。
WWDC の残りの部分が素晴らしいものであることを願っています。健康になりましょう。
最初のタスクは、Xcode プロジェクトでHealthKit 機能を有効にする必要があることです。
「Signing & Capabilities」をタップし、「+ Capability」ボタンを押します。「HealthKit」と入力すると、すぐに HealthKit フレームワークがアプリケーションに追加されます。これにより、ユーザーの健康情報を取得して保存できるようになります。
コメント