检测WatchKit扩展在应用程序中的存在

我有一个应用程序,如果WatchKit扩展程序安装在已配对的Apple Watch上,而不是如果不是,那么在更新和caching时,我的行为会有所不同。 如果watchkit扩展有任何启动的机会(你已经配对了一个手表和应用程序安装),那么我想要做更多的重型caching。

有没有什么办法可以检测Apple WatchKit Extension是否从我的iOS应用程序安装在Apple Watch上? 除了第一次设置标志之外,它是否启动,希望以后不会被删除?

干杯

我会重申我在这里给出的答案。 无法检测Watch是否已通过编程与电话配对。

我不知道这是否会为你工作,但我所做的是使用userDefaults(组)来设置一个标志,当手表应用程序启动。 然后我可以在主应用程序中检查它。 如果标志设置,我知道该应用程序已经安装。 当然,这不是防弹的,但是鉴于WatchKit目前的限制,这是最好的。 它不会告诉您手机是否已经配对,但会告诉您手机上已经安装了您的应用程序,因此手机本身必须(或一次)配对。

使用WatchConnectivity框架,您可以检查您的配对设备是否可用,并且该应用程序正在运行。

  • 从“目标 – >function”激活应用程序组
  • 在需要知道伴随应用程序正在运行的设备上尝试此代码。

目标C:

#import <WatchConnectivity/WatchConnectivity.h> yourClass : Superclass <WCSessionDelegate> WCSession* session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; -(void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(NSError *)error { if (activationState == WCSessionActivationStateActivated) { [[WCSession defaultSession] sendMessage:@{@"fromThisDevice":@"hello"} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) { NSLog(@"reply %@", replyMessage[@"fromOtherDevice"]); } errorHandler:^(NSError * _Nonnull error) { NSLog(@"error %@", error.userInfo); }]; } } - (void) session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler{ NSLog(@"message %@", message[@"fromOtherDevice"]); replyHandler(@{@"fromThisDevice":@"hello"}); } 

迅速:

 import WatchConnectivity yourClass : Superclass, WCSessionDelegate let session = WCSession.default() session.delegate = self session.activate() func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { if activationState == WCSessionActivationState.activated{ WCSession.default().sendMessage(["fromThisDevice" : "hello"], replyHandler: { (reply:[String : Any]) -> Void in print(reply["fromOtherDevice"] as Any) }, errorHandler: { (error) -> Void in print(error) }) } } func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { print(message["fromOtherDevice"] as Any) replyHandler(["fromThisDevice" : "hello"]) }