Почему вы не можете просто проверить текущую дату / время и запустить все отложенные задачи в разных местах вашего приложения, например, когда отображается новое представление или вызывается -applicationSignificantTimeChange:
? Вам действительно нужно обрабатывать свою задачу как в фоновом режиме, так и с точностью до миллисекунды в секунду?
Я имею в виду, что вы периодически (по таймеру или просто по действиям пользователя) проверяете необходимость выполнения ваших повторяющихся задач, а затем запускаете и записываете их.
Однажды в моей карьере я работал над приложением для отслеживания денег, и мы выполняли повторяющиеся задачи таким образом. Это было легко, безболезненно, и никто не жаловался.