Missing Purpose String in Info.plist File After Uploading Binary to App Store Connect

Occasionally, when you upload a binary to App Store Connect, you will one such message:

Dear Developer,

We identified one or more issues with a recent delivery for your app, “TimeShare SellBOX Calculator”. Please correct the following issues, then upload again.

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

It tells you that a string is missing from the info.plist file. To fix this issue, find that info.plist file and insert the appropriate string.

Since we are developing mobile apps with Flutter, the location of info.plist is in ios folder and then in the Runner subfolder. If you are using Android Studio 3.3, the easiest way to get there is by clicking directly. Once you click on info.plist, it will show up in the editor and you will be able to edit it as normal text.

Android Studio for Flutter info.plist

Access info.plist in Android Studio to file in the missing info string

Depending on the missing key, you may need to insert one or more key strings. A typical key string is like this:

<key>NSAppleMusicUsageDescription</key>
<string>We use access to music responsibly</string>

The message “We use access to music responsibly” will show up if the app is running but permission is not granted for some reason. You should, of course, insert a more appropriate message then this, somewhat, bland message.

If you want to “set and forget” about missing strings in info.plist, you may copy the following text into info.plist:


<key>NSAppleMusicUsageDescription</key>
<string>We use access to music responsibly</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>We use access to Bluetooth peripherals responsibly</string>
<key>NSCalendarsUsageDescription</key>
<string>We use access to Calendars responsibly</string>
<key>NSCameraUsageDescription</key>
<string>We use access to camera responsibly</string>
<key>NSContactsUsageDescription</key>
<string>We use access to contacts responsibly</string>
<key>NSFaceIDUsageDescription</key>
<string>We use access to FaceID responsibly</string>
<key>NSHealthShareUsageDescription</key>
<string>We use access to HealthShare responsibly</string>
<key>NSHealthUpdateUsageDescription</key>
<string>We use access to health update responsibly</string>
<key>NSHomeKitUsageDescription</key>
<string>We use access to home kit responsibly</string>
<key>NSLocationUsageDescription</key>
<string>We use access to location usage responsibly</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>We use access to location always responsibly</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use access to location when in use responsibly</string>
<key>NSMicrophoneUsageDescription</key>
<string>We use access to mictophone responsibly</string>
<key>NSMotionUsageDescription</key>
<string>We use access to motion usage responsibly</string>
<key>NFCReaderUsageDescription</key>
<string>We use access to NFC reader responsibly</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We use access to photo library responsibly</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>We use access to photo library with write only responsibly</string>
<key>NSRemindersUsageDescription</key>
<string>We use access to reminders responsibly</string>
<key>NSSiriUsageDescription</key>
<string>We use access to Siri responsibly</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>We use access to speech recognition usage responsibly</string>

This entry was posted in iOS, Flutter and tagged , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.