IOS App Store rejection on using bluetooth-central in the UIBackgroundModes key in Info.plist

i am using https://github.com/Estimote/react-native-proximity library for my react native mobile app and use estimote beacon for detecting customer entry.
App store rejected my ios app stating the following reason. is there any workaround for this? anyone faced this problem before and how do i resolve this?

Reason:
Your app declares support for bluetooth-central in the UIBackgroundModes key in your Info.plist but does not provide Bluetooth Low Energy functionality. The Bluetooth Background modes are for apps that communicate to other devices using Bluetooth Low Energy and the Core Bluetooth framework.

Next Steps

To resolve this issue, please revise your app to add support for Bluetooth Low Energy communication through Core Bluetooth in your app or remove the bluetooth- values from the UIBackgroundModes key.

Resources

For more information on Core Bluetooth, please review the Core Bluetooth Framework Reference.

Regular iOS apps are not allowed, can’t even, run in the background. Background Modes are special privileges for apps that allow them to do so, for some very specific purposes, e.g., to play music, or this case, use Bluetooth.

However, Apple regulates the usage of the Background Modes, otherwise every app could just enable every background mode, and the whole “running in the background” restriction wouldn’t make sense. So instead, during the App Store review, they check if the app declares the usage of any Background Modes, and then they make a judgment call if that’s allowed or not. For example, if you submit an app that’s clearly for playing music, then the “audio” Background Mode makes perfect sense, and the reviewer probably wouldn’t object.

In your case, it seems like the review team didn’t see/understand why your app needs to be able to use Bluetooth in the background. You may need to explain why/how your app uses Bluetooth in the background.

@heypiotr Thanks a lot for your help. i explained the usecase and they approved the app. i think this is something we should add to the faq.
Thanks again :slight_smile:

That’s great, congrats! :smiley: What’s the app? :wink:

I added an appropriate note to the react-native-proximity README, in the Background Support section, thanks for the suggestion!

we did not push it to production yet. it went through the beta review and i opted for manual push to production. app is not ready to be published yet :slight_smile:

This is easy! You simply do not need those keys to detect beacons in the background. Go ahead and remove them and resubmit.

You need no special background modes for beacon detection. You just need to request location permission from the user.

Oh Really? i didn’t try that. i was supposed to try that but since the app got accepted i ignored. will try that and let you guys know. Thank you @jennytrump.
BTW just curious - it still uses Bluetooth to communicate right ? meaning to receive the UUID/broadcasted signal with respect to the zone.

Thanks,
Jothi.

The Estimote Proximity SDK, on which the @estimote/react-native-proximity plugin is based, does require this background mode.

This background mode is not required for iBeacon-based devices and libraries/SDKs, but the Proximity SDK is no longer based on iBeacon, instead it uses Estimote’s own Bluetooth protocol.