10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WatchConnectivity Interactive Messagingの調査

Last updated at Posted at 2015-12-02

アプリ道場 Advent Calender 2015の二番煎じではなくて二番手の@sohichiroです。

せっかく記事を書くということで前から気になっていたwatchOS2においての通信部分の速度について調べてみました。

iPhone - Apple Watchとの通信に使うWatch Connectivityについて

iPhoneとApple Watchがデータを送信しあうには、以下のAPIを用います。

WCSession.h
public func sendMessage(message: [String : AnyObject], replyHandler: (([String : AnyObject]) -> Void)?, errorHandler: ((NSError) -> Void)?)
public func sendMessageData(data: NSData, replyHandler: ((NSData) -> Void)?, errorHandler: ((NSError) -> Void)?)

これらは、APIをコールすると、その場でデータを送信し、通信の成否によってクロージャを実行します
即座にデータを送信することを、「Interactive Messaging」とAppleは表現しています。

上記に対して、送信するタイミングが、システムの状態(OSの都合)に依存するのが以下の3つのAPIになります。

WCSession.h
public func updateApplicationContext(applicationContext: [String : AnyObject]) throws
public func transferUserInfo(userInfo: [String : AnyObject]) -> WCSessionUserInfoTransfer
public func transferFile(file: NSURL, metadata: [String : AnyObject]?) -> WCSessionFileTransfer

これらは、APIをコールすると、データをキューイングし、OSの都合の良いタイミングで、データを送信していきます。
Interactive Messagingで使用するAPIよりも比較的大きなデータを送受信するときに使用します。

ここでは、Interactive Messagingでデータを送信する際の制約について調査してみました。
なお今回の検証は、iPhoneからApple Watchへのデータ送信のみとなっています。

送信できるデータサイズは?

これは、実際どれくらいまで大きなデータが送信できるのかを、実際に送って確認してみました。
まずは、sendMessage()において確認。

送信するデータは、Stringに何文字入るか?というところで確認してみたところ。。

65525文字!

65525といえば、、2バイトデータよりちょっとだけ少ない。。

続いて、sendMessageData()。
こちらはStringをNSDataにエンコーディングして何文字のデータが送れるか?というところで確認してみたところ。。

65536文字!!

この数字は、文字数(1から始めてる)ですので、sendMessageData()に送信可能なデータ量は、2バイトで表されるデータ量ということのようです。
sendMessage()の方は、DictionaryのKeyの領域が割り当てられているでしょうか。。

送信にかかる時間は?

iPhone6Plus + Apple Watch 38mmの環境において確認しました。

送信時間は、データの大きさに依存します。
sendMessage()、sendMessageData()いずれの場合も、最も大きなデータ量(65525or65536文字)を送信した際は、約1.1sかかっています。まれに1.2sとかもあるので、1.5sぐらいがセーフティなところでしょうか。。
それに対し、データ量を最小にした場合は、約0.3sかかっています。

終わりに

確認に使用したコードを以下にアップしておきます。
ご参考になれば幸いです。
(コード汚いorz..)
https://github.com/sohichiro/watchConnectivityTime

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?