App Store Connect One or more issues

Hello!

Corona SDK version 2019.3480

Two plugins (appodeal, pollfish)

I have updated the same app before many times without any problem.

Just got this email.

Dear Developer,

We identified one or more issues with a recent delivery for your app. Your delivery was successful, but you may wish to correct the following issues in your next delivery:

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.

 

**

Adding this in NSAppTransportSecurity would help?

NSBluetoothAlwaysUsageDescription = “This app would like to use bluetooth functionality.”,

Yes, you need to simply add the NSBluetoothAlwaysUsageDescription to the plist section, but not to the the NSAppTransportSecurity. It’s something more like this:

 iphone = { plist = { UILaunchStoryboardName = "LaunchScreen", UIRequiredDeviceCapabilities = {"location-services" }, NSLocationWhenInUseUsageDescription = "This app uses the GPS when active to determine where to report weather for.", NSBluetoothAlwaysUsageDescription = "This app would like to access bluetooth.", NSAppTransportSecurity = { ... } } }

And that should take care of it. 

Now the more important question here is this: Are you using Bluetooth? I’m unaware of any Corona core features that use Bluetooth or is some plugin you have triggering this.  Can you share your build.settings?

Rob

Thanks Rob!

I’m not using bluetooth.

I update many apps with the same build.settings very often and it’s the first time I get this email.

settings = { plugins = { -- Base ['plugin.appodeal.beta.base'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.AmazonAds'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.GoogleAdMob'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.TwitterMoPub'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.StartApp'] = { publisherId = 'com.coronalabs' }, -- Banner --['plugin.appodeal.beta.AppLovin'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.FacebookAudience'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Flurry'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.InMobi'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.MyTarget'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Yandex'] = { publisherId = 'com.coronalabs' }, -- Interstitial --['plugin.appodeal.beta.AdColony'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.AppLovin'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.Chartboost'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.FacebookAudience'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Flurry'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.InMobi'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.IronSource'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Mobvista'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.MyTarget'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.StartApp'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Ogury'] = { publisherId = 'com.coronalabs' }, -- Rewarded Video ['plugin.appodeal.beta.AdColony'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.AppLovin'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.Chartboost'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.FacebookAudience'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Flurry'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.InMobi'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.IronSource'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.Mobvista'] = { publisherId = 'com.coronalabs' }, --['plugin.appodeal.beta.MyTarget'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.StartApp'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.Unity'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.beta.Vungle'] = { publisherId = 'com.coronalabs' }, ["plugin.pollfish"] = { publisherId = "com.coronalabs", supportedPlatforms = { iphone=true } }, }, orientation = { default = "portrait", supported = { "portraitUpsideDown", }, }, iphone = { xcassets = "Images.xcassets", plist = { UILaunchStoryboardName = "LaunchScreen", UIRequiredDeviceCapabilities = {"location-services" }, NSLocationWhenInUseUsageDescription = "This app uses the GPS when active to determine where to report weather for.", NSBluetoothAlwaysUsageDescription = "This app would like to access bluetooth.", NSLocationAlwaysUsageDescription = "This app would like to use location services.", NSAppTransportSecurity = { NSAllowsArbitraryLoads = true }, --UIApplicationExitsOnSuspend = false, UIPrerenderedIcon = true, UIStatusBarHidden = true, MinimumOSVersion = "8.3", }, }, }

Can you make a version that doesn’t use Appodeal plugin and submit it? I’m trying to determine if there is something in our core or in the Appodeal plugin that’s triggering this.

Rob

Sure, just give me a few hours.

It’s a busy day :confused:

I just got same email today.

I’m not using bluetooth too.

I update many apps with the same build.settings very often and it’s the first time I get this email.

build: 2019.3538

 plugins = { ['plugin.vibrator'] = { publisherId = 'com.spiralcodestudio' }, ["plugin.notifications.v2"] = { publisherId = "com.coronalabs" }, ["CoronaProvider.native.popup.social"] = { publisherId = "com.coronalabs" }, ["CoronaProvider.native.popup.activity"] = { publisherId = "com.coronalabs", supportedPlatforms = { iphone=true } }, ["plugin.gpgs.v2"] = { publisherId = "com.coronalabs", supportedPlatforms = {["android"] = true, ["android-kindle"] = true} }, ["CoronaProvider.gameNetwork.apple"] = { publisherId = "com.coronalabs", supportedPlatforms = { iphone=true } }, ["plugin.google.iap.v3"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true } }, ["plugin.appodeal.beta.base"] = { publisherId = "com.coronalabs", supportedPlatforms = { android = true, iphone=true } }, ['plugin.appodeal.beta.GoogleAdMob'] = { publisherId = 'com.coronalabs', supportedPlatforms = { android = true, iphone=true } }, ["plugin.appodeal.beta.TwitterMoPub"] = { publisherId = "com.coronalabs", supportedPlatforms = { android = true, iphone=true } }, ["plugin.appodeal.beta.AmazonAds"] = { publisherId = "com.coronalabs", supportedPlatforms = { android = true, iphone=true } },

The Appodeal plugin was updated today. You probably shouldn’t be using the “beta” version since the release version is now at a higher SDK level than the beta. 

I would suggest trying that and see if it clears the problem.

Rob

Only beta version had support for hasUserConsent.

Release version supports it now too?

Didn’t spend much time checking but I couldn’t find any info about hasUserConsent.

How do you expect newcomers to use it?

We’ve updated the docs to remove the hasUserConsent is a “beta” feature now that the release channel is newer than the beta channel. It’s documented here:
 

http://docs.coronalabs.com/plugin/appodeal/init.html#hasuserconsent-optional

The docs could take a few hours to update.

Rob

Now I can see it but again there is the notice that it’s only for beta.

There is no example either (for newbies).

Maybe it’s a matter of time until the docs get update.

I think I will try it along with 64bit builds.

Fingers crossed :slight_smile:

Thnx Rob!

Like I said, I’ve updated the docs to remove the beta only notice but it can take a couple of hours (plus any caching time on your end)

Rob

hmm… now error occured

BUILD ERROR: There was a problem linking the app.

I just change this ->

 ['plugin.appodeal.base'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.GoogleAdMob'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.AmazonAds'] = { publisherId = 'com.coronalabs' }, ['plugin.appodeal.TwitterMoPub'] = { publisherId = 'com.coronalabs' },

Can you share the entire build log and your entire build.settings? 

Thanks

Thanks!

I just sent logs/build.setting via BUG SUBMISSION.

Please post them here. Use a service like pastebin.com to post the log. What I got in the bug submission was a jumbled up mess and we are not to a point of a bug report yet.

When posting your build.settings, either use pastebin.com or the <> code formatting button in the row with bold and italic and paste your build.settings into the popup window.

Rob

string is too long, via Google Drive share :slight_smile:

build log:

https://docs.google.com/document/d/1yF3ZiiRgdAC-C1rICsuz986bOk40FU6w_iHKvrIqA3M/edit?usp=sharing

build.settings:

https://drive.google.com/file/d/17yldoG9YQTZQ0VXuqDFHOzImmhlWwuQ3/view?usp=sharing

Hello,

I published my first Corona app to Apple Store successfully on 17th October but got the same bluetooth warning. I am using Corona SDK version 2019.3504 and for monetization, I am using appodeal plugin. The bluetooth warning is because of Appodeal as it is coming for Unity users too: https://forum.unity.com/threads/submission-rejected-itms-90683-missing-purpose-string-in-info-plist.747302/

I contacted Appodeal and they said that they have fixed it. However, when I told them that I use Corona, I was asked to contact Corona support. This is their response:

“Unfortunately, we don’t support Corona at the moment, so it would be better to ask them, how to delete this framework from the plugin.”

I am not using the beta version of appodeal plugin. Please advise how to resolve this issue as I am afraid that I may have problem in publishing updates to my app in the future.

Thank you and regards,

Amna

I have the same problem.
 

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).

GamingStudio17 check Rob’s first reply. 

Add the NSBluetoothAlwaysUsageDescription to the plist section.