【Swift4】WatchConnectivityによるiOSアプリとwatchOSアプリのデータの送受信方法【Objective-C】【Xcode9】

2018年3月1日

iOSアプリとwatchOSアプリ間のデータのやりとりはwatchOS1まではAppGroupsの設定により、ファイルの共有やUserDefaultの共有が可能でしたが、watchOS2からはAppGroupsは使えなくなり、代わりにWatchConnectivityによるデータのやりとりにする必要があります。

今回はこのWatchConnectivityによるデータの送受信方法をやってみましょう。

WatchConnectivity

WatchConnectivityにはInteractive messagingBackground transfersの二種類が存在します。

Interactive messagingの特徴

  • データは即座に転送される
  • iOSアプリ、watchOSアプリ間の通信が可能状態である(reachable)

Background transfersの特徴

  • すぐにデータが転送されるわけではない
  • 転送のタイミングはOSがいいかんじに決めてくれる
  • 複数のデータを転送した場合、キューイングされ順に処理される

Session – データの受け取り準備

データを受け取る側は、受け取るための準備が必要です。
下記のコードに加え送信側が使用するメソッドに合わせて、受け取り用のDelegateメソッドも実装することになります。

Objective-C

Swift4.0

 

Interactive messaging – データのリアルタイム送信

  • リアルタイムなデータの送受信が可能
  • iPhoneとWatchがペアリングされている必要がある

Objective-C

送信側

受信側

Swift4.0

送信側

受信側

 

Background transfers – データのキューイング送信

Background transfersには次の3つの転送方法が存在します。

1.Application Context

  • 転送するデータはキューイングされ、送信待ちとなる
  • 新しいデータがキューイングに追加されると古いデータは上書きされる
  • 最終的に最新のデータのみが転送される

Objective-C

送信側

受信側

Swift4.0

送信側

受信側

2.User Info Transfer

  • Application Contextとは違い、キューイングされたデータは上書きされない
  • すべてのデータを転送することができる

Objective-C

送信側

受信側

Swift4.0

送信側

受信側

3.File Transfer

  • ファイルの転送が可能

Objective-C

送信側

受信側

Swift4.0

送信側

受信側

 

転送サイズについて

sendMessage:65,536 bytes (65.5 KB)
transferUserInfo:65,536 bytes (65.5 KB)
applicationContext:262,144 bytes (262.1 KB)