Ios 使用WatchConnectivity框架的独立Watch应用程序

Ios 使用WatchConnectivity框架的独立Watch应用程序,ios,watchos,watchconnectivity,Ios,Watchos,Watchconnectivity,在创建独立的watchOS应用程序时,是否可以使用WatchConnectivity框架 文档中指出,“当iOS设备可用时,独立应用程序可以使用WatchConnectivity从iOS同伴应用程序传输信息…” 但是我们如何在iOS应用程序和watchOS应用程序之间发送数据呢?检查isReachable属性时,WCSession对象始终返回false 感谢您的帮助:)在使用WatchConnectivity之前,必须在iOS和watchOS上激活WCSession(首先检查设备是否支持Watc

在创建独立的watchOS应用程序时,是否可以使用WatchConnectivity框架

文档中指出,“当iOS设备可用时,独立应用程序可以使用WatchConnectivity从iOS同伴应用程序传输信息…”

但是我们如何在iOS应用程序和watchOS应用程序之间发送数据呢?检查
isReachable
属性时,
WCSession
对象始终返回
false


感谢您的帮助:)

在使用WatchConnectivity之前,必须在iOS和watchOS上激活
WCSession
(首先检查设备是否支持WatchConnectivity)

激活是异步完成的。完成后,
func会话(\uSession:WCSession,ActivationIDComplete with activationState:WCSessionActivationState,error:error?)在会话对象的委托中调用(启动激活时必须设置该委托)。
如果激活成功,则激活状态现在为
.activated
。只有这样,才能启动任何传输

有。有些要求
.isReachable
为真,有些则不为真

updateApplicationContext(:)
向对应设备发送字典。当设备处于活动状态时,将收到该信息。如果在对方设备激活之前多次调用此函数,则只接收最后一个字典。此传输不需要
.isReachable

transferUserInfo(:)
也会发送一个字典,但是如果函数被多次调用,所有字典都会被传递。此传输也不需要
.isReachable

sendMessage(uu2;:replyHandler:errorHandler:)
还发送一个字典,如果函数被多次调用,所有字典都会被传递。此传输不需要
.isReachable

如果指定了
replyHandler
,则必须确保在系统尝试调用它时它实际可用。(应用程序可能调用此函数,在发送回复之前进入后台,然后被系统终止。如果随后调用回复,线程将崩溃。)

还有其他类型的数据、文件和复杂信息的传输,请参见文档

现在
.isReachable

iOS:
.isReachable
true
,如果配对的活动手表在范围内,则相应的WatchKit扩展正在运行,WatchKit扩展的
.isReachable
属性为
true

watchOS:
.isReachable
true
,前提是WatchKit扩展在前台运行或在后台以高优先级运行,并且iOS设备在范围内。请注意,iOS应用程序不需要激活。如果手表开始传输,而iOS应用程序未处于活动状态,它将被启动到后台,并可以处理通信

您提到,
.isReachable
总是
false

因此,如果这与watchOS应用程序有关,原因可能是WCSession的激活未成功完成,或者iOS设备不在范围内。
如果这与iOS应用程序有关,原因可能是WCSession的激活未成功完成,watch应用程序未在前台运行,或未在后台以高优先级运行,或watch不在范围内。

希望这有点帮助

在WCSession.default上调用session.activate()后,我收到以下错误消息:由于NSXPCConnectionInterrupted而重新连接到守护程序时出错,并且从未调用委托方法会话(uSession:WCSession,activationDidComplete with activationState:WCSessionActivationState,error:error?)。。。您曾经遇到过这种情况吗?IsCompAppInstalled属性始终返回false…NSXPCConnectionInterrupted错误很奇怪。以前有关于模拟器和设备的报道,但没有解决方案。我假设您尝试了通常的方法(清除构建文件夹和派生数据,重新启动模拟器/设备,卸载并重新安装watch应用程序,取消绑定并修复watch)。我发现这解决了
.iscomp.appinstalled
问题。也许这对你也有帮助?