2017年1月23日月曜日

watchOS3.0 Complicationの更新方法

Apple WatchのWatch Faceに表示できる、Complication(コンプリケーション)。
ここでとても大事になってくるのが、どれくらいの頻度で更新できるのか? です。
これらは、watchOS3になって更新方法がガラっと変わりました。

watchOS 2.0


更新回数制限は明記されていません。
実際に試してみると1時間に2回まで。3回以上だと制限を超える感じ。

watchOS 3.0

watchOS 2.0のgetNextRequestedUpdateDate(handler:) は廃止され、以下の仕組みに変わりました。


iPhone のコードから更新する場合


iPhoneから更新する場合は、1日に50回まで利用可能です。
残り回数も取得できるので計画的な利用ができるようになりました。
transfer... をCallすると、そこそこ速いタイミングで更新されます。


Apple Watchのコードから更新する場合

Apple Watch上のアプリをBackgroundでも動作させるには、Workout向けアプリなど、種類が限られています。
Backgroundで動作できないアプリの場合は、時間を指定してアプリを起こす必要があります。


更新回数制限については、明記されていません。

ドキュメントを引用すると、

Background app refresh tasks are budgeted. In general, the system performs approximately one task per hour for each app in the dock (including the most recently used app). This budget is shared among all apps on the dock. The system performs multiple tasks an hour for each app with a complication on the active watch face. This budget is shared among all complications on the watch face. After you exhaust the budget, the system delays your requests until more time becomes available.

Background app Refresh タスクは予算化されています。
一般的に、システムはドック内の各アプリ(最近使用したアプリを含む)ごとに、1時間あたり約1つのタスクを実行します。
この予算はドックのすべてのアプリで共有されます。
システムは、Activeなコンプリケーションがある各アプリに対して、1時間に複数のタスクを実行します。
この予算はWatchFace上のすべてのコンプリケーションで共有されます。
予算が全て使い果たされた後、システムはより多くの時間が利用可能になるまで、更新要求を遅らせます。


1分後にBackground refreshを指定したところ、
5分後だったり、30分後だったり、1時間後だったり...と結構バラバラになりました。
だいたい10分程度ほどで更新ができているようにも見えますが、あまり多くの更新はやっぱりやめたほうがよさそうな。

...が、「予算を使い果たしたので今日はもう更新されない」というものではなく、1時間に1回は更新し続けられるのでまだ使える場面が増えたようにも思います。


通知から更新する場合

PKPushTypeComplication (iOS 9.0+)  を使って更新もできるようです。
(試せていませんが...)



• • •