3

I am trying to put my cordova app up on the iOS app store. I am using cordova cli 8. It keeps getting rejected and says this error:

App Store Connect Dear Developer,

We identified one or more issues with a recent delivery for your app, "MyApp" 4.19.2 (4.19.2.4). Please correct the following issues, then upload again.

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSBluetoothAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Best regards,

The App Store Team

It's strange because I can see the string in my Info.plist file and in my config.xml file.

I don't know why it keeps getting rejected. My app doesn't use Bluetooth on it's own, it just has some cordova plugins that include it in there.

Info.plist

config.xml file

Aubrey Quinn
  • 311
  • 1
  • 3
  • 10
  • A similar question and answer can be found here https://stackoverflow.com/questions/57987863/nsbluetoothalwaysusagedescription-required-but-bluetooth-is-not-used – Maurice Sep 19 '19 at 13:19

3 Answers3

2

One thing that originally worked for me was setting the value of the diagnostics plugin in config.xml and updating the ios.json file under platforms/ios folder to remove all references to Bluetooth. I also read that you need to update frameworks.json but if I removed that, the build failed. I considered changing the value to 0 but when I tried it with the other changes, it worked for a while.

config.xml changes (outside of platform nodes):

<preference name="cordova.plugins.diagnostic.modules" value="LOCATION WIFI CAMERA NOTIFICATIONS MICROPHONE CONTACTS CALENDAR REMINDERS MOTION NFC EXTERNAL_STORAGE" />

And delete all references to bluetooth in ios.json.

bkhines
  • 161
  • 2
  • 15
0

This might be useful to some one, who use Zoom iOS SDK inside the app

When I uploaded the binary, Xcode said that app was uploaded successfully... But I received an email from App Store Connect with two issues:

First Issue: NSBluetoothPeripheralUsageDescription is required

Second Second: NSBluetoothAlwaysUsageDescription can be relaxed

I have provided the purpose description for the First Issue. This time the app is available through TestFlight for testing.

So it would be better to provide descriptions in the info.plist for both the issues like below.

<key>NSBluetoothAlwaysUsageDescription</key>
<string>Some useful description: </string>

<key>NSBluetoothPeripheralUsageDescription</key>
<string>Some useful description: </string>
Rishi
  • 743
  • 8
  • 17
-1

You need to specify in NSBluetoothAlwaysUsageDescription, why and where you are using Bluetooth and location. Then resubmit it, they will accept it.

Vinod Kumar
  • 3,375
  • 1
  • 17
  • 35
  • But I'm not using it at all. There is a cordova plugin that uses it but I don't use it. cordova-diagnostics – Aubrey Quinn Sep 19 '19 at 10:51
  • Then remove it. @AubreyQuinn – Vinod Kumar Sep 19 '19 at 10:51
  • I don't think it will let me. It always adds it back when the project is built again. – Aubrey Quinn Sep 19 '19 at 10:53
  • if you are not using Bluetooth, then remove it and if you are using Bluetooth then specify the reason with correct description. They are only rejected for your description. I have read your description, it not specifying where it is using. Your description is "Bluetooth is used to help determine location". – Vinod Kumar Sep 19 '19 at 10:57
  • I tried to write 'bluetooth is not being used' and it was still rejected. I can try one more thing I guess I can remove it manually. – Aubrey Quinn Sep 19 '19 at 10:59
  • if you are not using then remove it completely. Because of *NSBluetoothAlwaysUsageDescription* defines, you are using into your project, otherwise, you don't need to write. – Vinod Kumar Sep 19 '19 at 11:07
  • It still failed even though I removed the tag. It says this: Your app's code references one or more APIs that access sensitive user data – Aubrey Quinn Sep 19 '19 at 12:52
  • It means you are using it – Vinod Kumar Sep 19 '19 at 13:16
  • 1
    @AubreyQuinn, The cordova-diagnostic plugin has many functional modules, BLUTOOTH being one of them. And you can easily choose not to install the modules you're not using it. You just need to specify that under in your config.xml. e.g. – Manoj Shrestha Oct 04 '19 at 07:56