Итак, я создаю приложение, в котором есть функция будильника. Я провел много исследований о том, как заставить мое приложение оставаться в фоновом режиме в течение неопределенно долгого времени, реализуя одну из функциональных возможностей фонового режима iOS: фоновую выборку, воспроизведение аудио, службы определения местоположения и т. Д. эти методы, скорее всего, приведут к отклонению обзором App Store по очевидным причинам. Кроме того, все эти фоновые режимы потребляют слишком много батареи, что очень плохо с точки зрения пользовательского опыта. Поэтому я решил вообще отказаться от многозадачности, как предложено в этой статье: https://oleb.net/blog/2014/02/alarm-clock-apps-ios/
В этом случае мое приложение не перейдет в фоновый режим, например, когда пользователь блокирует экран. Вместо этого приложение подаст в отставку и останется в неактивном состоянии. Вот как я настраиваю свою тревогу: я планирую уведомление и планирую таймер для этой конкретной тревоги. Моя проблема в том, что в неактивном состоянии таймер, который я установил в будущем, не работает. В официальной документации говорится, что в неактивном состоянии приложение может выполнять некоторый код, но не получает события. Как тогда работает приложение будильника для iOS "Rise"?
Я много раз проверял эту функциональность, когда мое приложение находится на переднем плане и в активном состоянии, и оно отлично работает. Однако когда я устанавливаю будильник и блокирую экран, таймер перестает работать, как ожидалось. Я не понимаю почему. Я точно знаю, что мое приложение все еще работало и не было остановлено.
Еще одна важная вещь, которую я заметил, это то, что, когда я пытаюсь выполнить отладку и подключить свой iPhone к компьютеру, я вижу, что сообщения регистрируются в консоли, как и ожидалось, и таймер работает как положено, независимо от того, на какое время я планирую таймер и независимо от того, находится ли мое приложение в активном или неактивном состоянии. Но когда я отключаю телефон от моего MacBook, происходит какое-то волшебство, и таймер больше не срабатывает ...
Кстати, есть ли способ, как я могу уведомить свое приложение о локальном уведомлении, находясь в неактивном состоянии? Метод делегата «willPresent Notification» не вызывается в неактивном режиме.
Любые предложения и помощь будут высоко оценены!