AppDelegate
didFinishLaunchingWithOptions
メソッドでWCSession
を有効にすることが重要です。また、WCSessionDelegate
を設定する必要があります。他の場所で実行すると、システムがバックグラウンドで終了したアプリを起動したときにコードが実行されないことがあります。
また、返信はreplyHandler
で送信することになっています。あなたが他の何かを送信しようとすると、システムは決して来ない返答を待つ。したがって、タイムアウトエラー。ここで
は、それが殺されている場合、アプリをウェイクアップ例です。WatchExtensionで
:
セットアップセッション。その後、
func applicationDidFinishLaunching() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
そして、あなたはアプリから何か必要なときにメッセージを送信します:iPhoneアプリで
if WCSession.defaultSession().reachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
}
}
:
同じセッションのセットアップを、今回は一般的にあなたのExtensionDelegateで代議員を設定する:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
次に、代理人メソッドを実装して返信を時計に送信します。
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
これは時計とiPhoneの間に接続があるときに常に機能します。アプリが実行されていない場合、システムはバックグラウンドでアプリを起動します。
iCloudからデータを受け取るまでシステムが十分に待機するかどうかはわかりませんが、この例では明らかにアプリケーションを起動します。
iOSアプリのコードで、あなたがWCSessionを設定していますか? – ccjensen
AppDelegate -initメソッドで設定しました。私はそれがUIViewControllerまたはinitのright viewDidLoadする必要があると思った? –
さて、それはうまく聞こえます。あなたが送っているメッセージはかなり小さいと思いますか?もしそうなら、すべてのコードなしで何が間違っているのかを言うのは難しいです。 Appleにバグを報告するのはどうですか? – ccjensen