Guideline 5.1.1

Guideline 5.1.1 - Data Collection and Storage: Missing Purpose Strings

Low RiskEasyTypical Fix: 30 minutes - 1 hour0 Reports
Also known as:Missing NSCameraUsageDescriptionMissing NSMicrophoneUsageDescriptionMissing NSPhotoLibraryUsageDescriptionMissing NSLocationWhenInUseUsageDescriptionMissing NSLocationAlwaysUsageDescriptionMissing NSContactsUsageDescriptionMissing NSCalendarsUsageDescriptionMissing NSFaceIDUsageDescriptionMissing NSHealthShareUsageDescriptionPurpose string is too genericPurpose string does not explain specific featureSDK triggers permission prompt without purpose string

Our Take

Your app requests access to protected resources (camera, microphone, photo library, location, contacts, calendars, health data, etc.) but does not include the required NSUsageDescription strings in Info.plist.


Every protected resource access must include a human-readable purpose string explaining why the app needs that permission. Apple rejects apps where the purpose string is missing, generic (e.g., 'This app needs access'), or does not accurately describe the feature that requires the permission.

Resolution Guide

01

**Identify which strings are missing** — The rejection email tells you which key is missing. Common required keys:

| Resource | Info.plist Key |

|----------|---------------|

| Camera | `NSCameraUsageDescription` |

| Microphone | `NSMicrophoneUsageDescription` |

| Photo Library (read) | `NSPhotoLibraryUsageDescription` |

| Photo Library (write) | `NSPhotoLibraryAddUsageDescription` |

| Location (in use) | `NSLocationWhenInUseUsageDescription` |

| Location (always) | `NSLocationAlwaysAndWhenInUseUsageDescription` |

| Contacts | `NSContactsUsageDescription` |

| Calendars | `NSCalendarsFullAccessUsageDescription` (iOS 17+) |

| Face ID | `NSFaceIDUsageDescription` |

| Bluetooth | `NSBluetoothAlwaysUsageDescription` |

| Health | `NSHealthShareUsageDescription` |

| Motion | `NSMotionUsageDescription` |

| Tracking | `NSUserTrackingUsageDescription` |

02

**Write a specific, accurate purpose string** — The string must explain the specific feature, not just the resource. Examples:

  • Bad: `"This app needs camera access"`
  • - Good: `"Take a photo of your receipt to submit an expense report"`

    - Bad: `"Location is required"`

    - Good: `"Find restaurants near your current location"`

    03

    **Add to Info.plist** — In Xcode, select your target → Info tab → add the key. Or edit Info.plist directly:

    ```xml

    <key>NSCameraUsageDescription</key>

    <string>Take a photo of your receipt to submit an expense report</string>

    ```

    04

    **Check third-party SDKs** — Some SDKs trigger permission prompts. If you include an SDK that uses the camera (e.g., QR code scanner, AR framework), you need the purpose string even if your own code never calls the camera API.


    05

    **Localize purpose strings** — If your app supports multiple languages, add localized versions in `InfoPlist.strings` for each locale:

    ```

    /* InfoPlist.strings (Spanish) */

    NSCameraUsageDescription = "Toma una foto de tu recibo para enviar un informe de gastos";

    ```

    06

    **iOS 17+ calendar changes** — `NSCalendarsUsageDescription` is deprecated in iOS 17. Use `NSCalendarsFullAccessUsageDescription` or `NSCalendarsWriteOnlyAccessUsageDescription` depending on your access level.


    07

    **Verify in Simulator** — Run the app in Simulator and trigger every permission prompt. Confirm the purpose string appears correctly in each dialog.


    08

    **Audit all permissions** — Search your project for all `request.*Authorization`, `AVCaptureDevice`, `CLLocationManager`, `CNContactStore`, etc. to find every permission your app requests.


    Example Rejection Email

    From:Apple App Review Team
    Subject:Guideline 5.1.1 - Data Collection and Storage: Missing Pur
    This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data. This key is required for apps that access the device camera.

    Consider Appealing

    This is rarely appealable — the fix is straightforward. If the rejection cites a purpose string that your app does not actually use (e.g., camera access from a disabled SDK feature), explain that the SDK feature is disabled and provide evidence, or remove the SDK dependency entirely.

    Generate Appeal

    Before & After

    Before — Rejected

    Info.plist has no camera usage description, but the app includes a barcode scanning feature using AVCaptureSession. The app crashes or shows a blank prompt on first camera access.

    After — Approved

    Info.plist updated:

    <key>NSCameraUsageDescription</key>

    <string>Scan barcodes to look up product information and prices</string>


    Localized in InfoPlist.strings for supported languages.

    What changed: The purpose string must describe the specific feature (barcode scanning), not just 'camera access'. Apple reviewers check that the string matches the actual usage.

    Community Solutions · 0

    Sign in to share your solution.

    More Guideline 5 (Legal) rejections

    View all Guideline 5 rejections