我使用模拟器开发并部署了Apple Watch Extension App。它已被批准,现在可以在应用程序商店购买,所以Apple很高兴!
今天我能够亲身体验手表,并发现了一个真正的问题 - 如果手机上的应用程序不仅仅是打开的,而且还有活动的话,我只能与手机进行互动......从而打败了对象
我正在手机应用的appDelegate
中实施以下方法作为代理,以获取我的实时数据并将其返回观看。
我基本上将请求传递给appDelegate
- 我检查userInfo应该返回哪些数据,然后手机应用程序执行业务并返回包含要解析的手表数据的userInfo字典:
-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
if ([userInfo objectForKey:@"GetWatchData"]) {
[TPWatchData configureWatchData:^(BOOL success) {
if (success) {
reply([TPWatchData watchData]);
} else {
reply(@{@"FAIL":@"AppDelegate"});
}
}];
}
}
我在watch extension
上使用这种方法在手表中调用它(只是我调用的一个例子):
[TPWPlanList openParentApplication:@{@"GetWatchData":@1} reply:^(NSDictionary *replyInfo, NSError *error) {
if ([replyInfo objectForKey:@"Overview"]) {
if (error.code == 0) {
if ([replyInfo objectForKey:@"FAIL"]) {
// Something failed
} else {
self.dic_overview = [replyInfo objectForKey:@"Overview"];
//[self reloadPlanListTable];
}
} else {
// Something failed
}
}
}];
如前所述,这在模拟器中完美运行,并且实际上在物理手表上完美运行 - 但仅限于我在手机上打开主应用程序并激活。应用程序在后台或手机显示屏休眠的那一刻,使用上述方法不会传递任何数据。
有什么想法?我显然做错了什么,但是在我被咬了之前,我已经设法让整个事情变成了现实和真实的设备。
非常感谢!
答案 0 :(得分:5)
如果您的openParentApplication:reply:
方法仅在主机iOS应用处于活动状态时有效,我几乎可以保证您的iOS应用在其有机会回复之前在后台被杀死。
解决方案是让应用程序尽快响应请求,然后完成正常任务。在开发者论坛中有一个关于此的说明:https://devforums.apple.com/thread/264473?tstart=0
我还撰写了一篇博文,详细介绍了我在论坛中添加说明之前使用的方法:http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply