質問: iBeaconをバックグラウンドで検出してLocalNotificationを発行するアプリを開発し、 App Storeで公開しようとしています。 しかしながらiTunes Connectでバイナリを審査に出すと、 > > 2.16 - Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc. > > > という理由からリジェクトされてしまいます。内容としては > > Your app declares support for location in the UIBackgroundModes key in your Info.plist file but does not declare any features that require persistent location. Apps that declare support for location in the UIBackgroundModes key in your Info.plist file must have features that require persistent location. > > Specifically, it is not appropriate and not necessary to use the location background mode for iBeacon detections. > > > となり、iBeaconの検出にUIBackgroundModesのlocationキーの定義は不要で継続的な 位置情報を必要とする機能もアプリ内には見当たらないという内容でした。 ただアプリからUIBackgroundModesのlocationキーを外してしまうと、バックグラウンド 時のレンジングが全く動作せずフォアグラウンド時のみしかiBeaconの検出ができません。 Minor IDが異なる複数のiBeaconが存在する場所で、レンジング中に一番近くにある Beaconを選択して処理するためMinor IDを取得できないdidEnterRegion内では処理する ことができないです。アプリがバックグラウンドでiBeaconを受信してLocalNotification が表示される様子については審査の際に動画を送っているのですが・・・。 UIBackgroundModesのlocationキーを定義せずバックグラウンドでiBeaconのレンジング を継続する実装方法か、該当機能に継続的な位置情報が必要だとうまく説明する方法を 教えていただきたいです。
回答: まず始めにiOSアプリでは、UIBackgroundModesでlocationをセットするか否かに関わらず、Background起動時での継続的なレンジングはできません。 (ただし、約10秒間は動作します。) iBeaconのモニタリングは上記の設定に関わらずBackgroundでもアプリ停止時でも可能です。 レンジングはモニタリングに比べて消費電力が多くなるため、Apple側が制限をかけていると思われます。 もし、Background起動時でも、ある程度の時間、レンジングをしたいということであれば、UIBackgroundTaskを利用する方法があります。 ただし、最長で約3分間の起動です。 (3分を超えてレンジングし続けることはできません。) 参考: バックグラウンドで継続して処理を実施する 少しでも参考になれば幸いです。