我有 XCode 7.3、带有 iOS 9.3 的 iPhone5、带有 WatchOS 2.2 的 Apple Watch
我有一个想要支持 Watch App 的公司项目。首先,我构建了一个空项目,以确保 watchkit 和 watchkit 扩展工作正常,并且确实工作。我可以看到会话已建立并且手表已配对。
但是在我将相同的代码放入公司项目后,它只能工作一次:我第一次直接从 Xcode 运行应用程序。当我从后台杀死应用程序并再次打开它时,应用程序显示没有配对手表。在这种情况下,我得到以下日志:在 iOS 应用程序中
paired == NO ---- watchAppInstalled=== NO---- complicationEnabled==NO ----<WCSession:0x7ffb9a815ab0,hasDelegate:No,activationState:2>
在 watchKit 扩展中
Error Domain=WCErrorDomain Code=7004 "WatchConnectivity session has not been activated." UserInfo={NSLocalizedRecoverySuggestion=Activate the WatchConnectivity session., NSLocalizedDescription=WatchConnectivity session has not been activated., NSLocalizedFailureReason=Function activateSession has not been called.}
我关于 wcsession 的代码:
iOS 应用程序
在 AppDelegate+GC_WCSession
- (void)startWCSession{
[self configSession];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeLoginStatus:) name:GCLoginNotifyKey object:nil];
}
- (void)configSession{
if (![WCSession isSupported]) {
return;
}
_session = [WCSession defaultSession];
[_session setDelegate:self];
[_session activateSession];
}
- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {
[self.session activateSession];
if ([applicationContext objectForKey:k_WK_Token]) {
[self synchronousUserInfo];
}
}
- (void)changeLoginStatus:(NSNotification *)noti{
///
[self synchronousUserInfo];
}
- (void)synchronousUserInfo{
///customCode
[self.session updateApplicationContext:replayDict error:nil];
}
- (WCSession *)session{
if (![WCSession isSupported] || ![[WCSession defaultSession] isPaired ]|| ![[WCSession defaultSession]isWatchAppInstalled] ) {
return nil;
}
return _session;
}
在 AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self startWCSession];
}
watchKit 扩展
在 ExtensionDelegate
- (void)applicationDidFinishLaunching {
// Perform any final initialization of your application.
[self startWCSession];
}
- (void)startWCSession{
[self configSession];
}
- (void)configSession{
_session = [WCSession defaultSession];
[_session setDelegate:self];
[_session activateSession];
}
- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {
///customcode
}
- (WCSession *)session{
return _session;
}
这是我到目前为止所尝试的:
重置所有模拟器的内容和设置
从手表和 iPhone 中删除了手表应用
通过手机手表应用程序中的设置:删除手机应用程序的手表扩展并重新安装
尝试在 AppDelegate INIT 方法中设置 iPhone WCSession
我不认为代码有问题,因为它在一个空项目中工作。我想知道环境配置是否有问题。我现在在这个问题上挣扎了很多天。因此,每一个提示都受到高度赞赏。