---
title: "Modifying permissions in your iOS app | Nutrient"
canonical_url: "https://www.nutrient.io/guides/ios/getting-started/permissions/"
md_url: "https://www.nutrient.io/guides/ios/getting-started/permissions.md"
last_updated: "2026-05-23T00:08:18.103Z"
description: "Modify your iOS app’s permissions by updating the `Info.plist` file. Ensure compliance with Apple’s guidelines to avoid app rejection during submission."
---

# Modifying permissions in your iOS app

Certain features in Nutrient need additional permissions, which will require modifications in your `Info.plist` file. Adding these descriptive keys has been a recommendation since iOS 7 and this has been strongly enforced since iOS 10. When the system prompts the user to allow access for a certain subsystem, the value of the permission key will be displayed as part of the alert. From the [Apple documentation](https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html):

To protect user privacy, an iOS app linked on or after iOS 10.0, and which accesses TYPE, must statically declare the intent to do so. Include the KEY in your app’s `Info.plist` file and provide a purpose string for this key. If your app attempts to access TYPE without a corresponding purpose string, your app exits.

These rules are enforced statically at upload time in App Store Connect. The static code analyzer can’t detect whether or not the code is being used, so the descriptions for `NSCameraUsageDescription` or `NSMicrophoneUsageDescription` need to be added when linked with Nutrient, even if you don’t allow image or sound annotation creation. The description isn’t visible to the user; therefore, if you don’t use this anywhere in your app, you can use something generic.

Learn more in [Apple’s Technical Q&A QA1937: Resolving the Privacy-Sensitive Data App Rejection](https://developer.apple.com/library/content/qa/qa1937/_index.html).

## Microphone permissions

Creating [sound annotations](https://www.nutrient.io/api/ios/documentation/pspdfkit/soundannotation) requires that you set the [`NSMicrophoneUsageDescription`](https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html) key in your `Info.plist` file. This has been recommended since iOS 7 and enforced since iOS 10.

If you don’t set this, the application will crash with the following error log:

```

[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app’s Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.

```

To fix this, edit your `Info.plist` file and assign a descriptive string to this key. Nutrient has been checking for this since 5.5.1 to warn you in advance if you forget. See our sample projects for examples of such descriptions.

Apple statically checks for certain audio APIs, such as `AVAudioRecorder`. Using this class is enough to require the microphone permissions, even when this code path is never executed. The implication is that even when sound annotations are completely disabled, this string must be set to pass the static App Store check. In such a case, keep the description string generic. If the review team follows up and asks what this is for, you can reference this page and explain that there’s only one statically compiled binary of the Nutrient SDK, and the functionality is implemented but dormant. Permissions only appear in Settings once they’ve been requested, so the user won’t see these permissions in the Settings app.

Audio recording isn’t available in extension contexts, so this option will always be filtered out.

It’s also recommended to add “audio” to the [`UIBackgroundModes`](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html) key to allow sound recording in the background. See [Apple QA1668](https://developer.apple.com/library/ios/qa/qa1668/_index.html) for more details.

### App Store considerations

Apple might request information about how it can test `UIBackgroundModes` — simply attach [a sample PDF that contains a sound annotation (page 17)](https://www.nutrient.io/downloads/pspdfkit-ios-quickstart-guide.pdf) to this request. The file provided here contains copyright-free sample music and can be used to test sound annotations. Just make sure you don’t accidentally disable sound annotations by excluding them from [`Document.renderAnnotationTypes`](https://www.nutrient.io/api/ios/documentation/pspdfkit/document/renderannotationtypes).

## Image permissions

Creating [image annotations (stamps)](https://www.nutrient.io/api/ios/documentation/pspdfkit/stampannotation) using the camera requires the [`NSCameraUsageDescription`](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW24) key. Saving images requires [`NSPhotoLibraryAddUsageDescription`](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW17).

## Browser permissions

If you use `WKWebView` (e.g. via [`WebsiteLinkAnnotationEditingViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/websitelinkannotationeditingviewcontroller) for the link annotation editing UI, or via [`WebViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/webviewcontroller)), you might want to set `NSAllowsArbitraryLoadsInWebContent` to `YES` to allow both HTTP links and HTTPS pages that don’t yet comply with Apple’s [App Transport Security](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33) (ATS) rules to be loaded.

## Putting it all together

Your `Info.plist` file should have following entries:

```xml

<key>UIBackgroundModes</key>
<array>
   <string>audio</string>
</array>
<key>NSMicrophoneUsageDescription</key>
<string>Recording sound annotations requires the microphone.</string>
<key>NSCameraUsageDescription</key>
<string>Pictures captured with the camera can be added to the document as image annotations.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Images from documents and annotations can be saved to the photo library.</string>
<key>NSAppTransportSecurity</key>
<dict>
   <key>NSAllowsArbitraryLoadsInWebContent</key>
   <true/>
</dict>

```
---

## Related pages

- [Advanced Carthage integration](/guides/ios/miscellaneous/advanced-carthage-integration.md)
- [Advanced CocoaPods integration](/guides/ios/miscellaneous/advanced-cocoapods-integration.md)
- [Airdrop](/guides/ios/features/airdrop.md)
- [App Transport Security](/guides/ios/pspdfkit-instant/app-transport-security.md)
- [Bitcode](/guides/ios/faq/bitcode.md)
- [Carthage integration](/guides/ios/best-practices/carthage-integration.md)
- [Framework Size](/guides/ios/faq/framework-size.md)
- [Customizing The Page Number](/guides/ios/customizing-pdf-pages/customizing-the-page-number.md)
- [Optimize PDF documents for mobile rendering on iOS](/guides/ios/miscellaneous/optimize-pdf-documents-for-mobile-rendering.md)
- [Nightly Builds](/guides/ios/best-practices/nightly-builds.md)
- [Powered By Nutrient](/guides/ios/miscellaneous/powered-by-nutrient.md)
- [Customizing the log level on iOS](/guides/ios/features/logging.md)
- [iOS PDF SDK security](/guides/ios/faq/sdk-security.md)
- [Strategies For Multiple Bundle Ids](/guides/ios/faq/strategies-for-multiple-bundle-ids.md)
- [Third Party Compatibility](/guides/ios/miscellaneous/third-party-compatibility.md)
- [Transferring File Edits To A Server](/guides/ios/best-practices/transferring-file-edits-to-a-server.md)
- [Saving Data Externally](/guides/ios/memory-and-storage/saving-data-externally.md)
- [Youtube Links](/guides/ios/miscellaneous/youtube-links.md)
- [Version Numbering](/guides/ios/best-practices/version-numbering.md)
- [Using Automatic Saving Safely](/guides/ios/best-practices/using-automatic-saving-safely.md)
- [Manage your iOS status bar with view controllers](/guides/ios/faq/view-controller-based-status-bar-appearance.md)
- [Using Document Efficiently](/guides/ios/getting-started/using-document-efficiently.md)
- [About Memory Usage](/guides/ios/memory-and-storage/about-memory-usage.md)
- [Reduce App Size](/guides/ios/best-practices/reduce-app-size.md)

