Apple WatchのHealthKitと外部連携機能を見てみる
概要
SwiftとHealthKitを用いてApple Watchで心拍数を取得するアプリが作れるので、そのコードの内容を紐解いていく。
また、これを用いてスマートフォン(iPhone)との連携や外部へのデータ送信ができるかどうかについて考察してみる。
開発環境
・MacBook Pro(M1) / macOS Monterey 12.6.3
・Xcode 14.0.1
・iPhone 13 Pro / iOS 17.1
・Apple Watch Series 6 / WatchOS 9.6.3
参考サイト・ソースコード
実機にインストールできないと嘆いていたら、iOS 17系を経由してインストールするにはXcode 15が必要らしい。
自分の環境を見てみたらXcode 14。なぜインストールできないのかと調べていたら「Xcode 15のインストールにはmacOS 13.5以上が必要」らしい。
上にある開発環境の通り現在使っているMacBookのOSバージョンは12.6。
動かなくなる可能性のあるアプリがあることが懸念点ではあるが、macのOSを上げることでこれは解決できるだろう。
ボタンを押すことで文章が変化するコードを書いた。
「Button」と書かれた場所を押すことで「待機中(Stand-by)」から「送信(Send)」に変化する。(ここでは特に外部に送信するプログラムは書いていないため、あくまで表示が変化するだけ)
これに心拍の機能とiPhoneへの送信機能をつけられれば良いと考えているが、なんせWatchとiPhoneとの連携を行うための参考文献が少ない。とりあえず、手探りでやってみる。
import SwiftUI
struct ContentView: View {
@State var outputText = "待機中(Stand-by)"
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text(outputText)
}
.padding()
Button(/*@START_MENU_TOKEN@*/"Button"/*@END_MENU_TOKEN@*/) {
/*@START_MENU_TOKEN@*//*@PLACEHOLDER=Action@*/ /*@END_MENU_TOKEN@*/ outputText = "送信(Send)"
}
.tint(/*@START_MENU_TOKEN@*/.blue/*@END_MENU_TOKEN@*/)
}
}
ボタンの実機での動作確認。待機中には「待機中」と表示させ、送信ボタンを押すことで「送信」と表示。
下にあるリセットボタンを押すことで画面のリセット処理が行われ、「待機中」の表示に戻る。
外部との連携機能については現在調べているところである。
心拍情報とボタンを並べてみた。Sendを押すことでデータをiPhone上に送信できるようなシステムを作りたいと考えている。
(Apple Watch単体でも外部とのデータ送受信は可能なのかも検証していきたい。)
まずはサイトと同じようにカウンターを作ってみたが、同じような動作を行うことに成功した。
ここで書いたコードを参考にし、心拍数の数値をiPhone上でも見ることができるようにコードを書いてみる。
プロジェクトを新規で立ち上げた際に「Watch App with New Companion iOS App」という項目にチェックを入れておかないと、iPhoneとApple Watchでの双方向通信を行うアプリを作ることが出来なさそうなので注意したい。(後発で何か設定をいじればできるのかもしれないが、新規立ち上げ時に設定をしておいた方が楽。)
Apple Watchでの動作時にたまに同期が失敗することがあるので、その現象を探ってみる。
(アプリ再起動で治ることもあれば、失敗することもある。数時間放置してまたコネクトを試してみると成功することもあるので再現性が不明。)