iOS 앱을 사용하다가 홈버튼을 눌러서 빠져나간 후 일정 시간이 지나도 다시 앱으로 돌아오지 않으면 앱을 자동 종료하려고 했습니다.
검색해보니 UIApplication의 beginBackgroundTaskWithExpirationHandler라는 메소드를 이용하면 되더군요. 아래 소스 코드를 응용하면 됩니다.
iOS 9이후 아래 코드가 동작하는 시간은 3분입니다.

[[ AppDelegate.m ]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
UIBackgroundTaskIdentifier bgTask;

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"applicationDidEnterBackground");
   
    UIDevice* device = [UIDevice currentDevice];
   
    BOOL backgroundSupported = NO;
    if ([device respondsToSelector:@selector(isMultitaskingSupported)])
    {
        backgroundSupported = device.multitaskingSupported;
    }
   
    if(backgroundSupported)
    {
        NSLog(@"background task start!!");
       
        bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
            NSLog(@"Background task ran out of time and was terminated");
            [application endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
           
            NSLog(@"Bye bye");
            exit(0);
        }];
       
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            while(bgTask != UIBackgroundTaskInvalid)
            {
                [NSThread sleepForTimeInterval:1];
                NSLog(@"I'm alive!!");
            }
        });
    }
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog(@"Stop background task!!");
    [application endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
}