HealthKit

HealthKitアプリSwiftコードの紹介(6) – ヘルスデータのアップロード

HealthKitへのアクセス許可HKHealthStoreクラスのrequestAuthorization(toShare:read:completion:)メソッドは、HealthKitフレームワークを使用してユーザーからアプリへのデータアクセス許可をリクエストするために使用されます。このメソッドは、データの共有(書き込み)と読み取りの種類を指定し、ユーザーに対してそれらのデータへのアクセス許可を求めます。具体的には、次のようなパラメータを取ります:typesToShare: アプリがHealthKitに書き込むことを要求するデータの種類を指定するHKSampleTypeのセットです。例えば、身体活動データ、栄養データ、睡眠データなどが含まれます。typesToRead: アプリがHealthKitから読み取ることを要求するデータの種類を指定するHKObjectTypeのセットです。例えば、心拍数、血圧、歩数などが含まれます。completion: リクエストが完了した後に呼び出されるクロージャです。このクロージャは、次のパラメータを取ります:success: ユ

HealthKit

HealthKitアプリSwiftコードの紹介(5) – SwiftUIによるビューの実装

MyAppクラス:WindowGroupによるメインビューの定義ここからはSwiftUIによるビューのコードを説明していきます。SwiftUIは、Appleが提供するモダンなUIフレームワークであり、Swift言語でiOS、macOS、watchOS、tvOSアプリケーションを構築するための手段です。SwiftUIでは、状態駆動型のUIを構築し、シンプルで直感的な構文を使用してアプリケーションのビューを定義します。このコードは、SwiftUIのアプリケーションを定義しています。MyApp は App プロトコルを準拠しており、アプリケーションのエントリーポイントとなります。import SwiftUIimport Swinject@mainstruct MyApp: App { @AppStorage("isDarkMode") var isDarkMode: Bool = true // inject into SwiftUI life-cycle via adaptor !!! @UIApplicatio

HealthKit

HealthKitアプリSwiftコードの紹介(4) – HealthKitデータの管理

HealthKitデータの管理と同期を行うためのクラスこのコードは、HealthKitデータの管理と同期を行うためのクラス HealthKitStore とそれに関連するプロトコル HealthKitStoreProtocol を定義しています。このクラスは、HealthKitフレームワークを使用してユーザーのヘルスデータを読み取り、アップロードするための機能を提供します。import Foundationimport HealthKitimport UIKitimport Combineprotocol HealthKitStoreProtocol { func authorizeHealthKit(completion: @escaping () -> Void) func startObservingDataChanges(queue: DispatchQueue?, isBackgroundTask: Bool, completion: @escaping () -> Void) func updateCharac

HealthKit

HealthKitアプリSwiftコードの紹介(3) – HealthKitデータの監視

HealthKitの心電図データと数量データの監視次のstartObservingDataChangesメソッドは、健康データの変更を監視し、データをサーバーにアップロードするための非同期処理を開始するためのものです。このメソッドは、指定されたクロージャーの完了時に呼び出される非同期タスクを開始します。シーケンス図以下に、本投稿で説明する部分のシーケンス図を示します。まず、self.queue.asyncを使用して、データ処理を非同期で実行するためにディスパッチキューに渡します。これにより、メソッドの呼び出し元のスレッドがブロックされることなく、バックグラウンドで処理が行われます。その後、HealthKitStore.healthKitActivityTypeの各サンプルタイプに対して、処理を開始します。サンプルタイプごとに、最新の健康データサンプルを取得し、データを適切な形式に変換して処理します。例えば、心電図の場合はECGUploadDataModelに変換し、その他の健康データの場合はHealthKitQualityUploadD

HealthKit

HealthKitアプリSwiftコードの紹介(2) – バックグラウンドタスクサービスの実装

バックグラウンドタスクサービスの実装このコードは、バックグラウンドでHealthKitからヘルスデータを読み出すためのサービスを実装しています。BackgroundTaskServiceProtocolプロトコルを定義し、バックグラウンドタスクの登録や処理、データの取得などのメソッドを宣言しています。バックグラウンドでHealthKitからヘルスデータを読み出すSwiftコードの紹介(1)と同じ以下のシーケンス図を用いて説明していきます。BackgroundTaskServiceクラスは、BackgroundTaskServiceProtocolプロトコルを採用し、実装しています。このクラスは、ユーザーのデフォルト設定、Auth0サービス、データ同期API、ローカルデータベースなどの依存性を受け取ります。また、バックグラウンドで実行されるタスクの管理や、HealthKitからのデータ取得などを行います。import BackgroundTasksimport UserNotificationsimport HealthKitprotoc

HealthKit

HealthKitアプリSwiftコードの紹介(1) – DIコンテナへのサービス登録

はじめにこの投稿では、現在Swiftで開発中のiPhoneアプリの設計やコードの一部を紹介していきます。このアプリは、Apple WatchやiPhoneでHealthKitのデータベースに保存されたヘルスデータをサーバーに送信することが主な目的です。アプリがバックグラウンド中でも定期的にデータを送信することを目標にしています。また、アプリ上で簡単なグラフの確認もできるように実装しています。シーケンス図今回説明する部分のクラスの関係がわかりやすいようにシーケンス図を記載しました。シングルトンとしてのコンテナの実装このコードは、SwiftのDIコンテナライブラリであるSwinjectを使用して依存性注入を行うためのコンテナを定義しています。まず、Containerのインスタンスを生成し、Assemblerを使用してそのコンテナに複数のアセンブリを適用します。各アセンブリは、特定の機能や機能グループの依存関係を登録します。例えば、RepositoryAssemblyはリポジトリの依存関係を、MainNaviAssemblyはメインナビゲーシ