Czy iOS obudzi zakończoną aplikację, jeśli jest zarejestrowana w lokalizacji dla UIBackgroundModes?

Wiem, że jeśli aplikacja korzysta z „usługi znaczącej zmiany lokalizacji”, iOS obudzi ją, jeśli ma zostać dostarczona aktualizacja lokalizacji, nawet jeśli aplikacja zostanie zakończona.

Nie mogłem znaleźć jasnej odpowiedzi na temat przypadku, gdy aplikacja korzysta ze standardowych usług lokalizacyjnych i określa lokalizację jako klucz dla UIBackgroundModes: Czy iOS również ją obudzi, aby dostarczyć aktualizację, nawet jeśli zostanie zakończona? Czy aplikacja musi być uruchomiona w tle, aby uzyskać wywołanie zwrotne aktualizacji lokalizacji?

AKTUALIZACJA: W czasie gdy o to pytałem, nie miałem czasu, aby to przetestować. Ale po otrzymaniu tutaj odpowiedzi napisałem ten fragment kodu w delegacie mojej aplikacji, aby sprawdzić, czy moja zakończona aplikacja zostanie ponownie uruchomiona po otrzymaniu aktualizacji lokalizacji. Wyświetlany jest komunikat UILocalNotification po otrzymaniu powiadomienia o aktualizacji. Jednak gdy zamknąłem aplikację, a następnie zmieniłem lokalizację w mieście, aplikacja nie została ponownie uruchomiona i nie otrzymałem żadnych aktualizacji. Czy możesz mi powiedzieć, co robię źle?

AKTUALIZACJA # 2: Zgodnie z ostatnimi ustaleniami zawartymi w tym pytaniu i odpowiedziach, nie ma nic złego w tym kodzie i jest to oczekiwane zachowanie aplikacji, która korzysta ze standardowych usług lokalizacyjnych, a nie po ponownym uruchomieniu.

Dodałem lokalizację jako jedną z UIBackgroundModes w pliku Info.plist.

I to są części związane z lokalizacją mojego delegata aplikacji:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

    m_locManager = [[CLLocationManager alloc] init];
    m_locManager.delegate = self;
    [m_locManager startUpdatingLocation];
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [m_locManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog("%@", [NSString stringWithFormat:@"Background Fail %@", [error localizedDescription]]);
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    UILocalNotification * theNotification = [[UILocalNotification alloc] init];
    theNotification.alertBody = [NSString stringWithFormat:@"Background location %.06f %.06f %@" , newLocation.coordinate.latitude, newLocation.coordinate.longitude, newLocation.timestamp];
    theNotification.alertAction = @"Ok";

    theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];

    [[UIApplication sharedApplication] scheduleLocalNotification:theNotification];
}

questionAnswers(3)

yourAnswerToTheQuestion