iPhoneなどと、AppleWatchの通信に使う Watch Connectivityについてです。
だいたい、こんな感じでコーディングするようです。
// セッションの準備
if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
// データの送信
do {
let applicationDict = ["hoge" : "huga"]
try WCSession.defaultSession().updateApplicationContext(applicationDict)
} catch {
// エラー処理
}
そして、このAPIは「新しいデータがキューに追加されると古いデータは上書きされる」とのこと。 その仕様の影響なのでしょうか、同じ内容のデータ(辞書)を送信すると、さっき送ったから ということなのか、送られないようです。
Watch → iPhoneの場合は受信側が起動されるので問題ないようなのですが、iPhone→watchは受信に失敗する場合があるようです。 (自分でプログラムした)ACKが帰ってこないので、再送するが、ACKが帰ってこない。 っという現象に遭遇して発見しました。
結局、送信タイムスタンプを追加することで回避しました。
// データの送信
do {
let applicationDict = ["hoge" : "huga", "timeStamp":Date()]
try WCSession.defaultSession().updateApplicationContext(applicationDict)
} catch {
// エラー処理
}