Ship Desk

Rejection decoder › Guideline 5.1.1 data collection

Guideline 5.1.1 rejection: data collection and purpose strings

Guideline 5.1.1 covers what data an app collects and how it asks. For wrapped apps the usual trigger is a permission prompt: a camera, photo, location or microphone request whose explanation text is missing, vague, or shown before the user has any reason to allow it.

Apple decides. This page is our own reading of the App Review Guidelines as of September 2026, not Apple's wording, and following it does not guarantee approval. The current text at developer.apple.com is the authority.

What Apple's message says

Apple cites a sub-part. Paraphrased:

A related upload email, ITMS-90683 Missing purpose string in Info.plist, means a framework in the build references a protected API and the matching key is missing. Without the key, the app can crash when that API is used.

Why AI-built apps hit it

Capacitor plugins add native abilities, but they do not write your permission texts:

How to fix it, step by step

  1. List every permission the build can request. Check Info.plist for every NS...UsageDescription key and your installed plugins. Remove plugins you do not use.
  2. Write one specific sentence per key, saying what the app does with it, ideally with an example. For instance, camera: "Take a photo of a receipt to attach it to an expense." Location when in use: "Show gyms near you on the map." Microphone: "Record voice notes that are saved to your journal."
  3. Ask at the moment of use, not at launch. The camera prompt should appear when the user taps "Add photo".
  4. Handle "Don't Allow". The feature should explain how to enable access in Settings, and the rest of the app should keep working.
  5. Remove forced pre-prompts. A short explanation screen is fine if it lets the user continue without granting access.
  6. Open non-account features without login where possible, or explain why an account is needed.
  7. Match the privacy policy and App Privacy answers to what the app actually collects, then upload a new build.

What to reply in the Resolution Center

Fill in the brackets and delete anything you did not do. Quote the new purpose string so the reviewer does not have to find it.

Hello,

Thank you. In build [version], we updated the [camera / location / photo library] purpose string to: "[exact text]". The permission is now requested only when the user [action, e.g. "taps Add photo on the entry screen"], and the app continues to work if the user declines. [We removed the (location) permission, which the app did not need.]

Best regards,
[Your name]

Related guidelines

Questions

What should NSCameraUsageDescription say?

One specific sentence about what your app does with the camera, ideally with an example, such as "Take a photo of a receipt to attach it to an expense." Generic text like "This app needs the camera" is a common reason for a 5.1.1 rejection.

What does ITMS-90683 Missing purpose string mean?

Your build, or a framework in it, references a protected API such as the camera or location, and the matching usage description key is missing from Info.plist. Add the key with a real explanation, or remove the plugin that references the API.

Can I show my own screen before the system permission prompt?

A short explanation is generally fine, as long as the user can continue without granting access and the button does not pressure them. A screen with only an "Allow" or "Continue" option that leads straight to the prompt is a common 5.1.1(iv) finding.

Stuck on this rejection?

Paste the full message into the free rejection decoder to see every cited guideline explained, with a reply draft. It runs in your browser and nothing is uploaded.

Or order a rejection fix, $99: we read the full message, find the cause, fix it in your project, upload a new build and draft the reply for your approval. Target turnaround 72 hours from access. Apple still makes the final decision, and its review time is separate.