WatchOS Complication - перезагрузить больше, чем ежедневный бюджет? - PullRequest
0 голосов
/ 13 марта 2020

Я разрабатываю WatchOS Complication с типом graphicRectangular. Что-то вроде яблочной активности или осложнения сердечного ритма. Эти обновления часто и отображают некоторые данные графика.

Мой график работает - показывает события календаря на временной шкале.

Я не могу обновить его "каждую минуту". Было бы неплохо установить маркер для фактического времени (проверьте скриншот) на графике шкалы времени. Но эта идея в основном пропала, так как я могу заставить обновлять график только 50 раз в день (как я прочитал). Apple просто говорит:

Если ваша сложность уже превысила выделенный ежедневный бюджет на время выполнения, вызовы этого метода ничего не делают.

Так что я ничего не могу сделать, правильно? Даже когда моя цель не отправить ее в AppStore и проверить ее?

enter image description here

Теперь я разработал функцию это проверяет, нужно ли обновлять текст (на скриншоте выше 13:00 Lorem Ipsum) или изменился ли график, и если это так, вызывает метод reloadTimeline(). Так что не просто перезагружать его каждый раз, а только когда это необходимо. Но как мне вызвать эту функцию? Я пробовал в фоновом режиме задачи, но это проверяет только «когда он хочет» - я также строю повторяемый таймер 30 se c в ExtensionDelegate. Это также работает - но, кажется, работает только тогда, когда XCode запускает приложение. Если я остановлюсь в XCode, тогда график будет обновляться только каждые 15 минут или что-то в этом роде (возможно, фоновая задача).

Также я включил обозреватель EventKit для storeChanged (). Так что я могу перезагрузить график, если что-то изменилось в календаре. Это также хорошо работает и быстро цитируется при запуске приложения с активным XCode. Остановка приложения и использование его на часах «вне XCode», кажется, имеет большую задержку - иногда это никогда не срабатывает.

При открытии приложения (нажмите на усложнение) событие storeChanged() запускается немедленно (я думаю, что это - эта функция - я не могу действительно отладить это, так как все, что связано с XCode, работает хорошо очень быстро) и после При закрытии приложения осложнение обновляется.


Есть ли причина, по которой событие storeChanged() запускается очень быстро, а затем запускается через XCode, но крайне медленное / медленное / срабатывает только при открытии приложения, когда нет работает через XCode?

Есть ли причина, по которой мой таймер не запускается, когда не работает через XCode? При работе с XCode я вижу отладочные отпечатки в консоли из этих 30 "c проверок". Но это, похоже, ничего не делает при работе вне XCode. Просто редко обновляется осложнение.


Другой пример: сегодня утром, когда я надевал часы, график вчерашнего дня все еще был виден. Так что фоновая задача или таймер не работали в течение ночи. При открытии приложения (сложность нажатия) график немедленно обновляется.


Где находится правильное место для обозревателя EventKit или таймера? ExtensionDelegate или ComplicationController?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Причина, по которой все быстро работает в Xcode, заключается в том, что когда приложение подключено к отладчику, система не прекращает выполнение фоновых очередей. Таким образом, приложение, подключенное к отладчику, сохранит все ваши фоновые очереди живыми.

Таймер работает в основной очереди. Основная очередь работает все время, когда приложение подключено к отладчику Xcode. При запуске приложения без отладчика основная очередь приостанавливается, когда приложение переходит в фоновый режим.

Для повторного уточнения sh вашего усложнения вы можете:

К сожалению, вы не можете сделать больше, чем это. Когда ваше осложнение выходит за пределы яблок, оно больше не обновляется. Поэтому может быть лучше обновлять sh каждые 30 минут или что-то в этом роде.

0 голосов
/ 13 марта 2020

Я использовал getTimelineEndDate() и getTimelineEntries(for: after date:), чтобы произвести все другие запланированные "виды" осложнений в начальный / refre sh раз. Поэтому мне не нужно переоценивать sh усложнение, чтобы просто изменить «запланированный контент».

Мне просто нужно обновить sh, чтобы получить изменения из EventKit.

...