Skip to content
Narvy

ITMS-90683: missing or empty purpose string in Info.plist

Every protected resource your app or its SDKs can access needs a purpose string in Info.plist (NS…UsageDescription). Missing or empty, the upload gets ITMS-90683 and the app crashes on first access. Add a specific, user-facing sentence for each key.

App Store Connect e-mailITMS-90683
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 NSHealthShareUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data.
Xcode console, crash at runtime
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSHealthShareUsageDescription key with a string value explaining to the user how the app uses this data.

What it means

iOS shows the purpose string in the permission prompt. App Store Connect flags it when the code references a protected API or the app has an entitlement that grants such access, even if the reference comes from an SDK the app never calls. App Review then checks the text itself under guideline 5.1.1: it must explain clearly and completely why the app needs the data.

What the store check verifies, from the IPA: every NS…UsageDescription key present is non-empty (unless a localized InfoPlist.strings may fill it), and the HealthKit, HomeKit and NFC entitlements come with their keys. It does not infer the need for a key from API usage.

Deadline

No date: the key has always been required for the protected resource.

How to fix it

1. Add the key named in the e-mail

Info.plist
<key>NSHealthShareUsageDescription</key>
<string>Reads your step count to show daily progress.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>Saves the workouts you record in the app.</string>

Say specifically what the user gets. One-word strings ("Health", "Camera") are a common App Review rejection.

2. Localize it

Translate the key in InfoPlist.strings (or the String Catalog) for each language you ship. A localized file can supply the text when the base value is empty, which the store check reports as not determined rather than failed.

3. Entitlements without the feature

If the app has the HealthKit, HomeKit or NFC entitlement but no feature uses it, remove the capability in Xcode instead of writing a purpose string.

Check before you submit

Upload the IPA on the store check page. It runs APPSTORE-PURPOSE-STRINGS against the dates on this page, then deletes the file: nothing about the app is kept. The same engine runs offline in the Narvy CLI, and exits with code 1 when a blocker is found, so it can gate a CI job.

Offline, from a terminal (narvy-cli 1.2.0 or later)
narvy store-check MyApp.ipa

Check a build in the browser

FAQ

My app never uses the camera. Why does Apple ask for NSCameraUsageDescription?

Because a linked SDK references the camera API. Apple asks for the string even if your code never calls it: add an honest one, or remove the SDK.

Why is the Siri entitlement not checked?

The Siri entitlement is also used for intents and shortcuts that never request Siri authorization, and apps on the App Store ship it without NSSiriUsageDescription. Checking it would produce false alarms.