watchOS并发症–重新加载的费用超过每日预算吗?

时间:2020-03-13 10:48:41

标签: swift watchkit watchos eventkit apple-watch-complication

我正在开发类型为graphicRectangular的watchOS Complication。诸如苹果活动或心率并发症。这些更新通常会显示一些图形数据。

我的图表有效–在时间轴上显示日历事件。

我无法“每分钟”更新。在时间线图中为实际时间设置标记(检查屏幕截图)会很好。但是这个想法大部分都消失了,因为我每天只能强制更新时间轴50次(如我所读)。苹果只是说

如果您的并发症已超出其分配的每日预算 在执行时间上,对该方法的调用无济于事。

所以我无能为力,对吧?甚至当我的目标不是提交给AppStore并进行审查时,还是没有?

enter image description here

现在,我开发了一个功能,用于检查文本是否需要更新(在13:00 Lorem Ipsum上方的屏幕截图中)或图形已更改,并且是否触发了reloadTimeline()方法。因此,不仅是每次都重新加载它,而且仅在必要时才重新加载它。但是我应该怎么称呼这个功能呢?我曾在后台Task中尝试过,但仅在“需要时”进行检查-我还在ExtensionDelegate中构建了可重复的30秒计时器。这也可行–但似乎仅在XCode运行应用程序时有效–如果我停止在XCode中运行,则图表几乎每隔15分钟才会更新一次(可能是后台Task)。

我还为storeChanged()提供了EventKit观察器。因此,如果日历中发生了某些更改,我可以重新加载图表。当XCode处于活动状态时运行该应用程序时,也可以很好地运行并快速引用。停止应用程序并在“ XCode外部”的手表上使用它似乎有一个严重的延迟–有时它永远无法工作。

打开应用程序(轻按并发症)时,storeChanged()事件将立即触发(我认为这是此功能–由于连接到XCode的每个操作都非常快,因此我无法真正调试它)并且在关闭后在应用程序中刷新了并发症。


是否有原因导致storeChanged()事件被超快触发,然后通过XCode运行,却非常缓慢/缓慢/仅在不通过XCode运行时打开应用程序时触发?

是否没有通过XCode运行时Timer不运行的原因?当使用XCode运行时,我可以通过这些定时的30秒“检查”在控制台中看到调试打印。但是,在XCode外部运行时,这些似乎无关紧要。只是很少更新并发症。


另一个例子:今天早晨,当我戴上手表时,仍然可以看到昨天的图表。因此后台Task或Timer不能在一夜之间工作。打开应用程序(轻按并发症)后,图形将立即刷新。


EventKit观察器或计时器的正确位置在哪里? ExtensionDelegate还是ComplicationController

2 个答案:

答案 0 :(得分:2)

一切都在Xcode中快速运行的原因是,当将应用程序附加到调试器时,系统不会停止执行后台队列。因此,将应用程序附加到调试器将使您的所有后台队列保持活动状态。

计时器在主队列上运行。当应用程序连接到Xcode调试器时,主队列一直在运行。在没有调试器的情况下运行应用程序时,当应用程序进入后台时,主队列将被挂起。

要尽可能多地刷新并发症,您可以:

遗憾的是,您不能做更多的事情。当您的并发症超过Apple的限制时,就不会再刷新了。因此,最好每30分钟刷新一次。

答案 1 :(得分:0)

我使用getTimelineEndDate()getTimelineEntries(for: after date:)在初始/刷新时间产生了所有其他计划的并发症“视图”。因此,我不必为了更改“计划内容”而刷新复杂性。

我只需要刷新它即可从EventKit中获取更改。