С логической точки зрения основным методом может быть:
используйте структуру вроде:
struct run_time_for_month {
int month;
int minutes_left;
}
и сохранить в некотором файле параметров (возможно, с 0 по умолчанию).
при запуске приложения загрузите структуру, затем проверьте месяц. Если это 0, то это первый запуск, поэтому установите
month = current_month
minutes_left = 100 (for example)
и запишите его в файл.
Если месяц больше 0, то вы используете этот код (здесь я пишу некоторый псевдокод)
if current_month == saved_month then
if minutes_left <= 0 then
*** Running time for month ended ***
*** Notify the user and exit the app ***
else
saved_month = current_month
minutes_left = 100
и сохраните файл
Теперь, когда приложение работает, каждые x минут (с x = 5 или 10) и когда приложение выходит из системы, вы используете этот код (опять же, здесь псевдокод)
minutes_left = minutes_left - x
if minutes_left <= 0 then
*** Time for month ended ***
*** Notify the user and exit the app ***
это урезанная версия того, что я делаю в своем коде, когда мне нужно что-то подобное, но опять же: я работаю не с XCode и / или Objective C, а с C ++, так что это может быть только идеей.