PrivacyInfo.xcprivacy: an example file and the required-reason APIs explained

By Alok Singh · Published

Built by Alok Singh (Best Latest Apps). The privacy manifest generator linked here is ours.

Short answer: PrivacyInfo.xcprivacy is a property list with four keys: whether you track, your tracking domains, the data you collect and why, and the required-reason APIs you call, each with an approved reason code. Most apps need at least NSPrivacyAccessedAPICategoryUserDefaults with CA92.1. You can build the file in our privacy manifest generator or copy the example below.

Last updated: 2026-11-10

The four keys

KeyTypeWhat it says
NSPrivacyTrackingBooleanWhether the app or SDK tracks users as defined by App Tracking Transparency
NSPrivacyTrackingDomainsArray of stringsDomains used for tracking; iOS blocks them until the person allows tracking
NSPrivacyCollectedDataTypesArray of dictionariesEach data type collected, whether it's linked to the user, whether it's used for tracking, and the purposes
NSPrivacyAccessedAPITypesArray of dictionariesEach required-reason API category used, with NSPrivacyAccessedAPITypeReasons

The five required-reason API categories

Category (NSPrivacyAccessedAPIType)Typical APIsCommon reasonOther approved codes
NSPrivacyAccessedAPICategoryUserDefaultsUserDefaults, @AppStorageCA92.1: data only this app reads and writes1C8F.1 (App Group), C56D.1 (SDK wrapper), AC6B.1 (MDM managed configuration)
NSPrivacyAccessedAPICategoryFileTimestampcreationDate, modificationDate, stat, getattrlistC617.1: timestamps of files in your own container (for example cache age)DDA9.1 (showing dates to the user), 3B52.1, 0A2A.1
NSPrivacyAccessedAPICategorySystemBootTimesystemUptime, mach_absolute_time35F9.1: measuring time between events in the app8FFB.1, 3D61.1
NSPrivacyAccessedAPICategoryDiskSpacevolumeAvailableCapacity, statfsE174.1: checking free space before writing files85F4.1, 7D9E.1, B728.1
NSPrivacyAccessedAPICategoryActiveKeyboardsactiveInputModes3EC4.1: a custom keyboard app checking active keyboards54BD.1

Read Apple's wording for each code before you pick one: the privacy manifest generator shows every approved code with what it allows, and Apple's list is in Describing use of required reason API. Apple updates the list from time to time.

Example PrivacyInfo.xcprivacy

An app that doesn't track, collects crash data for app functionality, and uses UserDefaults and timestamps of its own files:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>NSPrivacyTracking</key>
  <false/>
  <key>NSPrivacyTrackingDomains</key>
  <array/>
  <key>NSPrivacyCollectedDataTypes</key>
  <array>
    <dict>
      <key>NSPrivacyCollectedDataType</key>
      <string>NSPrivacyCollectedDataTypeCrashData</string>
      <key>NSPrivacyCollectedDataTypeLinked</key>
      <false/>
      <key>NSPrivacyCollectedDataTypeTracking</key>
      <false/>
      <key>NSPrivacyCollectedDataTypePurposes</key>
      <array>
        <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
      </array>
    </dict>
  </array>
  <key>NSPrivacyAccessedAPITypes</key>
  <array>
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>CA92.1</string>
      </array>
    </dict>
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>C617.1</string>
      </array>
    </dict>
  </array>
</dict>
</plist>

Step by step

  1. List every required-reason API your code calls, including helpers: @AppStorage is UserDefaults, and a "time since launch" helper is usually system boot time.
  2. Do the same for each SDK. Check that SDKs ship their own manifests; your file doesn't cover them.
  3. Tick the categories and reasons in the generator, or edit the example above.
  4. Add the file to the app target (File > New > File > App Privacy).
  5. Archive, then in Xcode's Organizer generate the privacy report and check it matches your App Store privacy label.

Ways to create the file

OptionProsCons
Xcode's App Privacy templateBuilt in; edit as a property listYou look up every key and reason code yourself
Our privacy manifest generatorTicks instead of typing; shows every approved code with what it allows; opens an existing file to edit; runs in your browserIt can't see your code, so you still decide which APIs you use
Writing the plist by handFull controlEasy to mistype a key or code

Want the details of how the generator models Apple's rules and catches half-finished manifests? See Writing PrivacyInfo.xcprivacy without guesswork.

FAQ

Do I need a PrivacyInfo.xcprivacy file?

Yes if your app or SDK uses any required-reason API, which most apps do through UserDefaults or file timestamps. Since May 1, 2024, App Store Connect doesn't accept apps that use these APIs without declaring a reason in the privacy manifest.

What are required-reason APIs?

System APIs that could be misused to fingerprint a device. Apple groups them into five categories: file timestamps, system boot time, disk space, active keyboards and UserDefaults. For each category you use, you declare one or more approved reason codes.

Which reason code should I use for UserDefaults?

CA92.1 for data only your app reads and writes. Use 1C8F.1 when apps, extensions or App Clips in the same App Group share it, and C56D.1 if you are a third-party SDK wrapping UserDefaults for the host app.

Where do I put PrivacyInfo.xcprivacy in Xcode?

Add it to your app target with File > New > File > App Privacy, or drag the file into the project and tick your target. Third-party SDKs ship their own manifest inside the framework or package.

Does my app's manifest cover the SDKs I use?

No. Each SDK that uses a required-reason API has to declare it in its own privacy manifest; it can't rely on the app's file. Xcode combines all of them into a privacy report.

Do I need a manifest if my app collects no data?

Yes, if you use any required-reason API. Declare the APIs and reasons, set tracking to false and leave the collected data types empty.


Sources: Apple, "Describing use of required reason API" (developer.apple.com, enforcement from May 1, 2024; each SDK declares its own use), fetched 10 Nov 2026. Reason codes and their meanings match the live generator and the existing article on bestlatestapps.com. Codes in the "other approved codes" column are listed without descriptions on purpose; the page sends readers to the generator and to Apple for their exact wording.


← All guides