読者です 読者をやめる 読者になる 読者になる

しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

WatchKit2でiPhoneとデータ共有するWatch Connectivity(Background transfers)を使ってみる

WatchKit1ではApp Groupsでデータ共有ができていましたが、WatchKit2ではOSの仕組みが変わった事によって使えなくなりました。
代わりにWatchKit2から使えるようになったWatch Connectivityという機能を試してみました。

準備

プロジェクトにWatchConnectivity.frameworkを追加します。

f:id:llcc:20160505112153p:plain

iPhoneからAppleWatchにデータ転送する方法

iPhone側でやること

適当な箇所でセッションをアクティベートします。
自分はAppDelegateのapplication:didFinishLaunchingWithOptionsでアクティベートしました。

if WCSession.isSupported() {
     let session = WCSession.defaultSession()
     session.delegate = self 
     session.activateSession()
 
}

実際にデータを転送する処理は以下の通りです。

_ = try? session.updateApplicationContext(["sample": "data"])

AppleWatch側で対応すること

AppleWatch側でも同様にsessionをactivateする必要があります。

if WCSession.isSupported() {
     let session = WCSession.defaultSession()
     session.delegate = self 
     session.activateSession()
 
}

受け取りは以下のdelegateメソッドで行います。
iPhone側からデータを送信すれば以下メソッドが呼ばれ、applicationContextに送信したデータが入っているはずです。

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
}

AppleWatchからiPhoneへのデータ転送もupdateApplicationContextメソッドを使えば実現できます。

参考URL

watchOS 2 の Watch Connectivity を使ってみた - Qiita