apache / cordova-plugin-statusbar

Apache Cordova Status Bar Plugin
https://cordova.apache.org/
Apache License 2.0
617 stars 482 forks source link

iOS location issue on uploading the appstore - ask for NSLocationAlwaysUsageDescription #138

Closed yoavpa-tr closed 5 years ago

yoavpa-tr commented 5 years ago

Hi, I got the following message from apple once I uploaded the app to the app store.

Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSLocationAlwaysUsageDescription 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 will be 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).Thanks so much for filing an issue or feature request! Please fill out the following (wherever relevant):

Does your plugin use the device location / uses an API that uses the device location?

Reproduction

I don't get any error once I build and run the app in debug/release mode. only got the above mail from apple once I uploaded the app store.

Additional Information

breautek commented 5 years ago

The status bar plugin doesn't use or define the requirement of any geolocation features. One of your other plugins must define the Location requirement. Easiest way to determine this is if inside their plugin.xml file they contain <framework src="CoreLocation.framework" /> in their IOS platform tag.

If you do require geolocation features, then inside your config.xml, you can add the following to define a usage description.

<edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
            <string>This allows TotalPave PCI to center the map to your location to make it easier to select nearby sections.</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSLocationAlwaysUsageDescription">
            <string>This allows TotalPave PCI to center the map to your location to make it easier to select nearby sections.</string>
</edit-config>

You can also use this to completely disable an option, for example if you want to prevent Always permission from being selectable, you can do this:

<edit-config target="NSLocationAlwaysUsageDescription" file="*-Info.plist" mode="overwrite">
    <string />
</edit-config>

This will hide the Always permission option in the iOS settings UI. This might be helpful if you use geo location, but don't need the "Always" permission. Note the mode="overwrite" instead of "merge".

In my experience Apple can be really stingy sometimes. It's not uncommon for me to go back and fourth with Apple to find something that satisfies them yet not make your app appear stupid.

yoavpa-tr commented 5 years ago

Great, thanks!

On Thu, 18 Apr 2019 at 16:26 Norman Breau notifications@github.com wrote:

The status bar plugin doesn't use or define the requirement of any geolocation features. One of your other plugins must define the Location requirement. Easiest way to determine this is if inside their plugin.xml file they contain in their IOS platform tag.

If you do require geolocation features, then inside your config.xml, you can add the following to define a usage description.

This allows TotalPave PCI to center the map to your location to make it easier to select nearby sections. This allows TotalPave PCI to center the map to your location to make it easier to select nearby sections.

Note that in my experience Apple can be really stingy sometimes. It's not uncommon for me to go back and fourth with Apple to find something that satisfies them yet not make your app appear stupid.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/apache/cordova-plugin-statusbar/issues/138#issuecomment-484507775, or mute the thread https://github.com/notifications/unsubscribe-auth/AEMHHJ3TB47RVQJPRAZ4C3LPRBZJLANCNFSM4HG4X3BA .

snavdeepsingh commented 4 years ago

I tried the following but it didn't work for me.

<edit-config file="*-Info.plist" mode="overwrite" target="NSLocationAlwaysUsageDescription">
            <string />
 </edit-config>

I still got this warning from apple 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 NSLocationAlwaysUsageDescription 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).

snavdeepsingh commented 4 years ago

How can I disable/hide the Always permission option in the iOS settings UI?