2016-11-12 9 views
2

위치 업데이트를 수신하고 iOS 4 이후 백그라운드에서 정상적으로 작동하는 피트니스 앱이 있습니다. 앱이 백그라운드로 이동할 때 위치 업데이트가 중지되었음을 알았습니다 앱 전환 또는 기기 잠금). 기능 또는 배경 권한에 대한 변경 사항을 발견하지 못했습니다. 아무도 무슨 일이 일어 났는지 압니까?iOS 10에서 iOS 위치 관리자 백그라운드 업데이트가 중지되었습니다.

내 위치 설정은 매우 기본적인 :

if (!self.locationManager) { 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    self.locationManager.distanceFilter = kCLDistanceFilterNone; 

    self.locationManager.activityType = CLActivityTypeFitness; 
    self.locationManager.pausesLocationUpdatesAutomatically = TRUE; 
} 

// request permissions on iOS 8+ 
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
    [self.locationManager requestWhenInUseAuthorization]; 
} 

다음이 콜백 업데이트를받습니다 앱이 포 그라운드에있을 때

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    DLog(@"didUpdateToLocation"); 
} 

모든 것이 좋다. 백그라운드로 이동하자마자이 메시지가 콘솔에 나타납니다.

/BuildRoot/Library/Caches/com.apple.xbs/Sources/ExternalAccessory/ExternalAccessory-353.22.1/EAAccessoryManager.m:__52-[EAAccessoryManager _checkForConnectedAccessories:]_block_invoke-785 ending background task 

업데이트가 중지됩니다. 앱을 포 그라운드로 가져 오면 다시 시작됩니다.

나는 직접 EAAccessoryManager을 사용하지 않으며 그게 무엇인지 추측 할 수 있습니다. 심박수 모니터에서 데이터를 수신하기 위해 BluetoothLE 프레임 워크를 사용하고 있지만이 기능을 비활성화하면 (BluetoothLE 개체의 인스턴스를 중단하지 않음) 문제가 남아 있습니다.

내 UIBackgroundModes는 Pebble watch connectivity가 있기 때문에 location, external-accessorybluetooth-central으로 설정되었습니다. 나는 bluetooth-peripheral를 추가하려고했지만 도움이되지 않았습니다. 또한 NSLocationWhenInUseUsageDescriptionNSBluetoothPeripheralUsageDescription 세트가 있고 작동합니다.

+0

외부 액세서리 배경 모드가 필요하지 않습니다. 외부 액세서리 프레임 워크를 사용하지 않는 한 ios9 이후로는 https://developer.apple.com/reference/corelocation/cllocationmanager/1620568-allowsbackgroundlocationupdates를하고있는 것처럼 보이지 않는'allowsBackgroundLocationUpdates'를 설정해야합니다. 그러나 ios9 이전에 앱을 마지막으로 다시 빌드 한 경우 이전 동작 grandfathered했다 – Paulw11

+0

그것은 그 것이다! iOS 8 이후 앱을 업데이트하지 않았으므로 iOS 9의 변경 사항에 대해서는 알지 못했습니다. 답변으로 추가하면 받아 들일 것입니다. – arlomedia

답변

5

iOS 9 - allowsBackgroundUpdatesCLLocationManager에 새 속성이 추가되었습니다. 이 속성의 기본값은 false이며 백그라운드에서 위치 업데이트를 받으려면 명시 적으로 true으로 설정해야합니다.

iOS 8 SDK에 대해 작성된 앱은 grandfathered 기능을 수신했으며이 속성을 설정하지 않아도 백그라운드 업데이트를 계속 받았습니다.

+0

변경 사항이 실제로 iOS 9에서 발생한 것을 알게되었으므로 문제에 대한 많은 검색 결과가 나타납니다. – arlomedia