4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Apple Watchで寿司をまわしてGetWildする

この記事はWanoグループ Advent Calendar 2016の最終日です。

ちょっと前にうちの会社の上司からApple Watchをお下がりでもらったんですよ。

なのでちょっと寿司を回してみようと。

ついでにGet Wildも流してみようと。

それでね、クリスマスを迎えて今年を締めればいいじゃない。

作りました。

概要

  1. Apple Watchで寿司を表示する。
  2. iPhoneのアプリを起動する。
  3. Apple Watchに寿司をタップする.
  4. 寿司がまわる
  5. 同時にiPhoneからYoutubeの音楽が流れる。
  6. うれしい

以上。

getWildAndSushi.gif

ちなみにGet WildはYoutubeのこれを表示しています。

ハマった所

sendMessageがiPhone側で受け取れない

Apple WatchからiPhoneを操作する時に、WCSessionのsendMessageを使うんですよ。
これがなぜか何度やっても動かない。

2016-12-25 18:42:49.692848 GetWildAndSushi WatchKit Extension[17803:213358] [WC] -[WCSession _onqueue_notifyOfMessageError:withErrorHandler:] errorHandler: NO with WCErrorCodeDeliveryFailed

messageを送るとこんなエラーが出てiPhone側でメッセージを受け取れなかった。

原因

最初はこんな感じでApple Watchの送信側を書いてました。

// open func sendMessage(_ message: [String : Any], replyHandler: (([String : Any]) -> Swift.Void)?, errorHandler: ((Error) -> Swift.Void)? = nil)
WCSession.default().sendMessage(["Get": "Wild"], replyHandler: nil, errorHandler: nil)

定義は上のコメントの通り。
最初のDictionaryはiPhone側に送るデータ。
replyHandlerは、iPhone側でメッセージを受け取った時に、任意のタイミングで実行するコールバック関数。
errorHandlerはエラー時に呼ばれるコールバック関数を渡す。

ここで定義だとreplyHandlerはoptionalなので、適当にnilを渡してたのだが、これがいけなかったらしい。
以下のように適当な関数を渡したらいけた。

WCSession.default().sendMessage(["Get": "Wild"], replyHandler: {_ in}, errorHandler: nil)

なんで定義がoptionalやねん(´・ω・`)

というわけでみんなも寿司を回すと良いよ

Happy Merry Christmas!!!!🎉

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
4
Help us understand the problem. What are the problem?