私のアプリはバックグラウンドで位置情報を追跡します...位置情報バックグラウンドモードが有効になっていて、
[self.locationManager startUpdatingLocation];
これはうまく機能しますiOS7-8
が、機能しなくなりましたiOS9
シミュレータでは動作しますが、実際のデバイスではバックグラウンドでコールバックが取得されません... iOS8デバイスで同じコードを実行すると、以前と同じように通常のコールバックが取得されます
これは文書化されていますか? シミュレータでは動作するのに、デバイスでは動作しないのはなぜですか? これはバグですか?
iOS9で使用した場合startSignificantChangeUpdates
、これは何らかのバッテリー節約機能であり、startUpdatingLocationを禁止している可能性があるのではないかと思います。
ベストアンサー1
使用:
if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
[self.locationManager setAllowsBackgroundLocationUpdates:YES];
}
システム バージョンを評価するマクロの使用を避けるためです。これにより、iOS 9 では setAllowsBackgroundLocationUpdates: が呼び出されますが、iOS 8 では呼び出されません。