2016-11-12 20 views
2

iOS 4以降、ロケーションアップデートを受信して​​いて、バックグラウンドで正常に動作しているフィットネスアプリがあります。アプリがバックグラウンドに移動したときに現在位置アップデートが停止していますアプリを切り替える、またはデバイスをロックする)機能やバックグラウンド権限の変更に関する通知はありませんでした。誰が何が起こっているのか分かりますか?iOS 10でiOS Location Managerのバックグラウンドアップデートが停止しました

私の場所のセットアップはかなり基本的なものです:

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ウォッチの接続性を持っているので、location,external-accessoryおよびbluetooth-centralに設定されていました。私はbluetooth-peripheralを追加しようとしましたが、それは役に立たなかった。私もNSLocationWhenInUseUsageDescriptionNSBluetoothPeripheralUsageDescriptionが設定されています。

+0

外部アクセサリのバックグラウンドモードは必要ありません。外部アクセサリーフレームワークを使用している場合を除きます。 ios9以降、https://developer.apple.com/reference/corelocation/cllocationmanager/1620568-allowsbackgroundlocationupdatesを実行しているようには見えない 'allowsBackgroundLocationUpdates'を設定する必要があります。ただし、ios9より前にアプリを最後に再構築した場合、古い動作 – Paulw11

+0

で壮大だったよそれはそれです!私はiOS 8以降のアプリを更新していないので、iOS 9の変更についてはわかりませんでした。これを回答として追加すると、私はそれを受け入れます。 – arlomedia

答えて

5

iOS 9 - allowsBackgroundUpdatesCLLocationManagerに新しいプロパティが追加されました。このプロパティのデフォルトはfalseで、バックグラウンドでロケーション更新を受信する場合は、明示的にtrueに設定する必要があります。

iOS 8 SDKに対して作成されたアプリケーションでは、grandfatheredという機能性を受け取り、このプロパティを設定しなくてもバックグラウンド更新を引き続き受けました。

+0

変更が実際にiOS 9で発生したことを知りましたので、問題の検索結果が多数表示されます。 – arlomedia

関連する問題