위치 업데이트를 수신하고 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-accessory
및 bluetooth-central
으로 설정되었습니다. 나는 bluetooth-peripheral
를 추가하려고했지만 도움이되지 않았습니다. 또한 NSLocationWhenInUseUsageDescription
및 NSBluetoothPeripheralUsageDescription
세트가 있고 작동합니다.
외부 액세서리 배경 모드가 필요하지 않습니다. 외부 액세서리 프레임 워크를 사용하지 않는 한 ios9 이후로는 https://developer.apple.com/reference/corelocation/cllocationmanager/1620568-allowsbackgroundlocationupdates를하고있는 것처럼 보이지 않는'allowsBackgroundLocationUpdates'를 설정해야합니다. 그러나 ios9 이전에 앱을 마지막으로 다시 빌드 한 경우 이전 동작 grandfathered했다 – Paulw11
그것은 그 것이다! iOS 8 이후 앱을 업데이트하지 않았으므로 iOS 9의 변경 사항에 대해서는 알지 못했습니다. 답변으로 추가하면 받아 들일 것입니다. – arlomedia