【Xcode7.2 + MacOX10.11.2 + watchOS 2】
前回に引き続き、Apple Watch用アプリを試してみました。今回は親子間(iPhone、Apple Watch)の通信について。実機がないのでSimulatorで確認。
同じ方の書いたこの記事を参考にしました。
・Apple Watch アプリから親アプリの情報を更新する。 – Apple Watch アプリプログラミング
ただこのままだとエラーが出て、コンパイルが通りません。watchOS 2では、ここで通信に使っている WKInterfaceController.openParentApplication() というメソッドが使えないようです。
そこで調べてみたら、この記事で解説されていました。
・[Apple Watch] Watch Connectivity: sendMessage 即座にメッセージを送るには
準備は、こんな感じになります。
・WatchConnectivity を import する。
・WCSessionDelegate を設定する。
・WCSession のサポートの有無をチェックする(WCSession.isSupported())。
・WCSession がサポートされているときには WCSession を初期化(WCSession.defaultSession())して、delegateを設定し、activeにする(activateSession())。
後は、送信・受信用のメソッドをWCSession 用に書き換えてやればOKです。
・送信:– sendMessage:replyHandler:errorHandler:
・受信:– session:didReceiveMessage:replyHandler:
ちょっと気になったのは、Simulatorでのテストでは、iPhone >> Watch への送信は即時に受け取れるんですが、Watch >> iPhone への送信は、10秒ほどのタイムラグが出ました。これがSimulator のみの問題なのか、Apple Watch の仕様なのかは、実機がないので確認出来ていません。
【その他参考リンク】
・WCSession Class Reference – iOS Developer Library
・WCSessionDelegate Protocol Reference – iOS Developer Library
・iOS – watchOS 2 の Watch Connectivity を使ってみた – Qiita
・[watchOS 2][iOS 9] Watch Connectivity で情報をやりとりする様々な方法 | Developers.IO