iOSからWatchOSとのConnectivity with SwiftUI

2020.03.03

はじめに

今回は、Swift UI をはじめ進化したXcode11を試していくということで、
iOSとWatchOSを連携させてみたいと思います。

Swift UIが発表されてしばらく立ちますが、まだまだ知見が少ないように感じているので共有していきます。

今回は、iOSからWatchOSにデータを送信してみたいと思います。

開発環境

  • Xcode11.3
  • Catalina 10.15.3

 

実装

iOSとWatchOSを通信させるためには、
WCSessionを使う必要があるということなので、
公式のドキュメントを参考に実装していきます。

SwiftUIと共にWatchOSがスタンドアローンで動くようになったということで、
iOS とWatchOSの通信には、
WCSessionクラスを使う必要があります。

iOS側の実装

『import watchConnectivity』をインポートして、『WCSessionDelegate』を追記します。

必ずWCSessionが使えるかどうかを確認するコードを追加する必要があるということで、以下のコードを追加しました。

※こちらの確認はWatchOS側でも必要です。

また、WCSessionDelegateを追加すると、以下の関数を追加しないとエラーになるので追加しました。

 

iOSの全てのコード

AppDelegate.swift

 

メッセージの送信は以下のように実装しました。
『WCSession.default.transferUserInfo([String : Any])』で送信可能です。

ContentView.swift

WatchOS側のコード

WatchOS側での受信は以下の通りです。
init関数をオーバーライドして、WCSessionが使えるかどうかを確認しています。
didReceiveUserInfoを引数にとっているsession関数を見てもらえると参考になるかと思います。

受信したデータは『observedObject』などでクラス間で使えるようにしています。

まとめ

今回は、iOSからWatchOSにデータを送る方法をまとめてみました。
大変スマートにコーディングができるSwift UIの可能性もあいまって、
WatchOSアプリケーション開発の可能性も大幅に上がったような気がしています。

 

参考

SwiftUIについては以下の記事がかなり参考になりました。