Вы устанавливаете обработчик истечения срока действия, но вы, кажется, на самом деле ничего не делаете в фоновом режиме. Похоже, что ваш код скопирован из Выполнение кода в разделе Background руководства по программированию приложения для iOS. Следующий фрагмент кода в этом примере:
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task.
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
Обработчик истечения не будет вызываться до тех пор, пока не будет достигнут срок (10 минут, когда я последний раз проверял); вы выполняете работу в задаче, которую отправляете асинхронно, а не в обработчике срока действия.