Error fixes / App Store
App Store
App Store: ITMS-90683 missing purpose string
The upload was rejected because a protected API is in the binary and Info.plist has no usage description for it.
The error
ITMS-90683: Missing purpose string in Info.plist. Your app's code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the "App.app" bundle should contain a NSCameraUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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.
What it means
ITMS-90683 is an App Store Connect upload error, not a review note. The key named in the message is the one you must add. The example is often the camera, photos, microphone, location, Bluetooth or tracking. Expo plugins, Capacitor plugins and Swift packages reference those APIs even when your screen never asks. Guideline 5.1.1(ii) then requires the string to explain the use completely. A generic sentence is how a later review rejection replaces this upload error.
Fix
- Read the key in your copy of the error. Add that key, not a different one, to Info.plist or to the Expo, Capacitor or Flutter config that generates it.
- Write a sentence that names the feature. If you do not use the API, remove the plugin that referenced it and upload again.
- Rebuild a release archive. A debug plist is not the file that was uploaded.
- Search the project for other UsageDescription keys that are empty. The next upload will stop on the next missing one.
- Install the build and trigger the dialog. The system sheet should show your sentence.
Prompt
Fix prompt
Upload failed with ITMS-90683. The message names a missing usage-description key. Use the key from the real message if it is not NSCameraUsageDescription. Add that key to the iOS Info.plist source with a sentence that names the feature. If no feature uses the API, remove the dependency that referenced it instead of writing a vague string. Tell me which plugin pulled the API in. Do not invent a feature to justify the permission.
Questions
Why does this mention the camera when I never used it?
A dependency can reference the API. The upload scans the binary, not your screens. Either add an honest purpose string or remove that dependency and rebuild.
I added the string and the upload still failed. Why?
The message names one key at a time. Add the new key it reports, and confirm the string is in the Release build's Info.plist, not only in a local debug file.
Will 'This app needs access to improve your experience' pass review?
It may get the binary through upload and still fail review. Guideline 5.1.1(ii) asks for a clear, complete description of the use. Name the feature.