问题标签 [wcsession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
153 浏览

ios - Can the iPhone App respond to file transferred via Apple watch if it is inactive?

I am developing an apple watch application which records an audio file, saves it and then transfers the file URL to the iPhone app via WCSession (Watch Connectivity framework). My code looks like this

In InterfaceController.m

In ViewController.m (WCSession delegate)

This works absolutely fine if both the WatchApp & the iPhone App are Active.

How can I make it work when the iPhone is in the background/ inactive/ in the locked state?

0 投票
1 回答
825 浏览

wcsession - watchOS 后台任务在 setTaskCompleted 上崩溃

在我的手表扩展委托init函数中,我在以下位置设置了 KVO 观察者WCSession

为了完成所有的watch后台任务,这里调用了函数

通常,这可以正常工作。
但是,我在以下日志中崩溃了:

显然,在其中一项任务 setTaskCompleted中调用时会发生崩溃。WKRefreshBackgroundTask

但是可能是什么原因,或者如何调试呢?

0 投票
0 回答
136 浏览

ios - WCSession:在 iOS 上提交的数据永远不会在 Watch 上收到

我正在为 iOS 开发一个小型时间跟踪应用程序。用户可以创建任意数量的活动,然后跟踪他在每个活动上花费了多少时间(例如睡觉、开车上班、吃饭、工作等)。

现在我想添加 Apple Watch 支持:用户应该能够从他的手表上的列表中选择一个活动,输入一个时间值并将这个结果提交给 iOS 应用程序,然后更新它的数据。

所以,我需要双向沟通:

WCSession在双方都实施了,但无论我尝试什么,似乎都没有沟通:

无论使用哪种方法在 iOS (或) 上发送数据updateApplicationContext:error:,都不会在 Watch 上调用接收委托方法。sendMessage:replyHandler:errorHandlertransferUserInfo:

我做错了什么?

首先转移数据的正确方法是什么?

0 投票
0 回答
487 浏览

swift - didReceiveMessage 接收并响应消息但未调用方法

观看应用界面控制器:

iOS 应用主视图控制器:

正如我们从控制台输出(下图)中看到的那样,应用程序接收到消息并发送回响应

回复:[“消息”:来自应用程序的您好]

我的问题是没有其他代码运行

  • print("test1") 从不显示在控制台上
  • didReceiveMessage 和 Communicator.addScheduledMeeting 中的断点未命中

旁注我不知道它是否相关,但我觉得它可能是,我应该提到它。
要运行我的手表应用程序,我选择“WatchKit App”并点击播放(它在我的控制台输出的这种模式下)。但是在此期间,我的应用程序仅出现在手表模拟器上。如果我尝试在 iPhone 模拟器上打开它,它会打开显示活动指示器,然后变黑然后返回主屏幕。如果我只选择“”并点击播放,应用程序运行良好。我可以手动启动手表应用程序,但对控制台没有任何影响,也没有任何断点。

0 投票
1 回答
878 浏览

ios - Watchkit - didReceiveApplicationContext 仅在第一次工作

当我在 Xcode 中使用 iOS 和 watchOS 模拟器运行手表连接应用程序时,WCSession 委托方法 didReceiveApplicationContext在第一次工作,但随后它没有被调用,并且接口控制器中没有任何变化。谁能解释一下为什么会发生这种情况?

下面是 UIViewController 的 WCSessionVC 类

下面是 WKInterfaceController 的 InterfaceController 类

0 投票
1 回答
146 浏览

swift - 为什么通过 Apple Watch 向 iPhone 发送消息时 print() 不起作用?

我正在学习如何为 iPhone 应用程序创建配套的 Watch 应用程序。(一切都在模拟器上完成)

当我点击 Watch 应用程序上的按钮时,我正在发送消息。

然后我在 ViewController.swift 中收到消息:

打印功能都不会触发。但是我知道我收到了消息,因为我的标签正在更新。断点在此函数中也不起作用。如果我在 didRecieveMessage 函数中调用另一个函数,它将触发。

这是一个错误吗?这让我觉得我的消息没有被发送很长时间,因为我只是想看看函数是否通过 print() 和断点触发。

如果不是错误,为什么 print() 不起作用?

0 投票
0 回答
766 浏览

ios - 将身份验证标头从 iPhone 共享到 Apple Watch

用户在他们的 iPhone 上登录我们的应用程序。之后,我们将身份验证信息安全地存储在钥匙串中。我们的用户不必在每次使用该应用程序时都登录。

现在我们正在添加一个 Watch 应用程序。我们也想在 Watch 上做一些网络请求。如果当用户在他们的手机上登录时这会起作用,那就太好了。

但是,无法在 iOS 和 Watch 设备之间进行 Keychain Sharing。这可以在 WatchOS 开始时完成,但在 WatchOS 2 之后就没有了。所以这给我们留下了一个问题。

所以:我们可以使用WCSession.

但:

  • 那有多安全?关于如何确保安全的任何想法?
  • 是否有其他方法可以安全地将身份验证令牌从手机传输到手表?
0 投票
1 回答
62 浏览

swift - Apple Watch WCConnectionDelegate,在activationDidComplete 中发送消息偶尔会失败?

我遇到一个问题,当通过 WCConnection 发送消息时,session.sendMessage如果在委托方法中调用有时会失败activationDidCompleteWith。该问题并非每次都可重复(事实上,它在大多数情况下都有效)。

但是通过在我的 UI 中使用按钮(调用相同的加载代码)强制 asession.sendMessage会立即成功进行会话通信,因此我知道问题不在于会话本身或主应用程序。

假设会话已准备好接受通信是否不安全activationDidCompleteWith?有没有更好的地方可以打电话给我的初次沟通?

0 投票
1 回答
72 浏览

swift - WKInterfaceTable 未填充可编码数据

我的 JSON 对象没有被发送到我的 WKInterfaceTable。

UITableView 填充正确。最后一步是填充 WKInterfaceTable。该代码没有在 Xcode 中引发错误,但由于强制转换失败而导致运行时崩溃。

编辑:感谢 Dale,我修复了错误处理行,因此运行时消息消失了,但同样的问题仍然存在。

打印LoadedData:可选(<5B7B2273 7065616B 65722223A 224A6F68 6E22222222222222222222222222222222222222222222222222222222222转

0 投票
1 回答
94 浏览

ios - 在 iPhone 应用程序启动时多久可以调用 session didReceiveApplicationContext

在我的手机应用程序中,WCSession是在 AppDelegate 的didFinishLaunchingWithOptions方法中激活的。手表应用程序正在向applicationContext手机应用程序发送信息。假设在这次转移时手机应用程序没有运行,而当手机应用程序稍后启动时,呼叫可以提前多长时间didReceiveApplicationContext进入手机应用程序?我不担心延迟或到达多晚。我想知道是否有可能在 rootViewController 的viewDidLoad方法运行之前调用。当应用程序在手机上启动时,此会话事件是否可以在UIWindow创建事件和viewDidLoadon the事件之间的某个位置进入事件循环?rootViewController

在我对真实设备上的应用程序的测试中,它总是发生在viewDidLoad调用之后,但通常在 AppDelegate 的applicationDidBecomeActive.

我正在使用故事板。但是,如果在代码中创建了主视图,我有兴趣了解任何可能的差异。此外,其中的操作didReceiveApplicationContext不会触及任何视图或子视图。它只是存储数据并通知任何注册的视图控制器。