Baseflow / flutter-permission-plugins

This repo contains a collection of permission related Flutter plugins which can be used to request permissions to access device resources in a cross-platform way.
https://baseflow.com
MIT License
52 stars 33 forks source link

iOS permission key search is incomplete #52

Open bhusang opened 4 years ago

bhusang commented 4 years ago

🐛 Bug Report

Using XCode 12.1 & iOS 14.1, there is an additional location permission key which is ignored by this plugin. The key in question is 'NSLocationAlwaysAndWhenInUseUsageDescription' which is an amalgamation of the handled keys 'NSLocationWhenInUseUsageDescription' and 'NSLocationAlwaysUsageDescription'. The current code does not have a check for this "new" key. Although I am a novice wrt to Flutter plugins, I will try to create a pull request.

Expected behavior

To not throw an exception when the key 'NSLocationAlwaysAndWhenInUseUsageDescription' is used in the Info.plist.

Reproduction steps

Define 'NSLocationAlwaysAndWhenInUseUsageDescription' in Info.plist. Debugging the app demonstrates that an exception is thrown -

Exception has occurred.
PlatformException (PlatformException(ERROR_MISSING_PROPERTYKEY, To use location in iOS8 you need to define either NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in the app bundle's Info.plist file, null, null))

Configuration

Version: 1.x

Platform:

martipello commented 3 years ago

did this every get fixed? our app was flagged by apple i believe it was because of the recent inclusion of this library

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