HOME > アップルWatchから親アプリケーションへデータ送信
アップルWatchから親アプリケーションへデータ送信
前回の記事では実機上で親アプリケーションからAppleWatchにイベントを送るのができなかった。 Notificationでできるはずなのですが、動作してくれなかった、、、、、。今回はいったん逆の時計から親アプリへのデータ送信の方法サンプルサイト をQiita様の中の記事でみつけましたので検証してみます。
参考:WatchKit AppからiPhone上の親アプリケーション本体にデータを渡す
参考:handleWatchKitExtensionRequest not responding to openParentApplication in Watchkit Extension (Swift)
Watch OS 2以降はデバイス間のデータ移管はWatchConnectivityを利用します
NSUserDefaultは利用できなくなっているので注意です!(2017-02-24)代わりにWCSessionをご利用ください。
参考:[watchOS 2][iOS 9] Watch Connectivity で情報をやりとりする様々な方法
参考:
NSUserDefaults not working on Xcode beta with Watch OS2
参考:[WatchOS2] WatchOS2からiOSに対してメッセージを送る
やってみた
どうやらWatch側でopenParentApplication:reply:、本体実機側のアプリで application:handleWatchKitExtensionRequest:reply:を 実装すれば対応できるとのことです。やってみます。ひげがのびる怪しい過去記事のサンプルを利用しながら、端末でのびるヒゲの本数を 親アプリにも教えてあげるサンプルを作成してみます。
このWatch側で動いている処理を本体へ、、、、
まずWatch側の実装です
func onHigenobita(){
//ここが実行されます
timerLabel.setText("ひげが\(++higeCnt)本のびた");
WKInterfaceController.openParentApplication(["higeValue": "\(higeCnt)"],
reply: {replyInfo, error in
println(replyInfo["fromParentApplication"])
})
}
タイマーで呼ばれている箇所です。ここにopenParentApplicationを実装します。replayのfromParentApplicationは実機側のAppから 返信内容を表示している箇所です
引き続き親側も準備します。AppDelegate.swftに以下を追加してみます
func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
var higeValueFromWatch: String = userInfo["higeValue"] as! String!
reply(["fromParentApplication":"Parent Application got \(higeValueFromWatch) Hige!"])
}
すると、、、 AppDelegate.swift:69:10: Parameters of 'application(_:handleWatchKitExtensionRequest:reply:)' have different optionality than expected by protocol 'UIApplicationDelegate' こんな警告が出たなんだこれは。よくわかりませんが、警告ですので恐る恐る進めてみます。すると、、、、思っているようにうまくいかない。。。Watch側が真っ黒(ログは受け取っていたので動作はしている様でした。)。
↓
と思いましたがCleanしてからだとWatch側表示されました。うーん、いまいち挙動がまだおかしいような気がする。β版なので仕方ないのかな
ひとまず確認できました。本体のiPhone側実機からreplayされている内容が反映されているのをLogで確認できました。
カスタマイズ
あんまり思い浮かびませんでしたので、ヒゲの伸びる速度を1.25倍ずつ加速度的に伸びるようにしてどんな気持ちになるかを検証してみました。
func onHigenobita(){
//ここが実行されます
higeCnt = higeCnt * 1.25;
timerLabel.setText("ひげが\(higeCnt)本のびた");
WKInterfaceController.openParentApplication(["higeValue": "\(higeCnt)"],
reply: {replyInfo, error in
println(replyInfo["fromParentApplication"])
})
}
なんだか胸がモヤモヤします。気持ちいいものではありませんね。。。。
まとめ
WatchKitの検証よりもヒゲが伸びて僕の気持ちがどう動くかの訳のわからぬお恥ずかしい検証になってしまいました。。。失礼しました。
(※2015/3/5追記)AppleWatchの発表があるとのAppleカンファレンス<3月9日>がもうすぐです!事前のまとめ情報をGIZMODE様で見つけましたので共有です!
発表会直前! 世界が注目するApple Watch事前情報まとめ
↓こんな記事もありますよ!
![]() | カスタムクラスを作成時いつも忘れる。継承クラス作成時のメモカスタムクラスを作成する時いつもUIViewを継承する際のrequired Initの箇所でハマってしまうので覚書です。 |
![]() | Typealiasをどうやって活用するのかTypealiasって言葉、なんだややこしく見て見ないふりをしていましたが、 先日別の記事を書いた際にTypealiasの記述がありましたので、あらためて確認してみようと思います。まずaliasですが、 Macでショートカットを作成した時に記載される「エイリアス」です。ショートカットのようなものですので、 Typeのショートカット的な感覚で調査進めてまいります。 |
![]() | ScrollViewで横スクロールしつつ2指でPinch Zoom前回のScrollView記事ではスワイプするサンプルを記載しましたが、今回は横スクロールしつつ各ページでは二つ指によるズームの方法を検証します。 |
Tweet
![]() |
|||
|