Guideline 5.1.1
Guideline 5.1.1 - Data Collection and Storage: Missing Purpose Strings
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
**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` |
**Write a specific, accurate purpose string** — The string must explain the specific feature, not just the resource. Examples:
- Good: `"Take a photo of your receipt to submit an expense report"`
- Bad: `"Location is required"`
- Good: `"Find restaurants near your current location"`
**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>
```
**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.
**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";
```
**iOS 17+ calendar changes** — `NSCalendarsUsageDescription` is deprecated in iOS 17. Use `NSCalendarsFullAccessUsageDescription` or `NSCalendarsWriteOnlyAccessUsageDescription` depending on your access level.
**Verify in Simulator** — Run the app in Simulator and trigger every permission prompt. Confirm the purpose string appears correctly in each dialog.
**Audit all permissions** — Search your project for all `request.*Authorization`, `AVCaptureDevice`, `CLLocationManager`, `CNContactStore`, etc. to find every permission your app requests.
Example Rejection Email
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.
Before & After
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.
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
- Guideline 5 - Legal: Remove Watermark Feature
- Guideline 5.1.1 - Data Collection and Storage: Incomplete Privacy Manifest
- Guideline 5.1.1 - Data Collection and Storage: Privacy Manifest Missing
- Guideline 5.1.1 - Data Collection and Storage: Privacy Nutrition Label Mismatch
- Guideline 5.1.1 - Data Collection and Storage: Privacy Policy
- Guideline 5.1.1 - Privacy: ATT Framework Without Tracking Usage Description