Quick answer: Your binary uses “required reason” APIs (UserDefaults, file timestamps, system boot time, disk space) without declaring why. Add a PrivacyInfo.xcprivacy with an NSPrivacyAccessedAPITypes entry and approved reason code for each category Apple lists in the email, update your engine to a version that ships its own manifest, and update third-party SDKs to versions that include theirs.

Since May 2024, App Store Connect rejects uploads whose code calls certain APIs without a privacy manifest explaining why. Game engines hit this constantly, because saving settings, measuring time and checking free space are exactly the APIs on Apple's list. The email tells you which categories and which binary.

The exact message

ITMS-91053: Missing API declaration - Your app's code in the "UnityFramework" file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryUserDefaults. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app's privacy manifest to provide approved reasons for these APIs used by your app's code.

The file named in quotes is the binary that uses the API (your engine framework, the app itself, or a third-party SDK). The categories are what you must declare.

The categories games usually need

CategoryTypical game useCommon reason code
UserDefaultsSettings and saves (Unity's PlayerPrefs uses UserDefaults on iOS)CA92.1: data used only by the app itself
FileTimestampChecking save or cache file datesC617.1: files inside the app container
SystemBootTimeFrame timing, elapsed time35F9.1: measuring time between events
DiskSpaceChecking space before downloads or savesE174.1: checking space before writing

Each category's full key is the name above prefixed with NSPrivacyAccessedAPICategory, as in the email. Choose reasons that are true for your app from Apple's documentation on required reason APIs. Declaring a reason that does not match your use is itself a review problem.

Add a privacy manifest

Create PrivacyInfo.xcprivacy (Xcode has a template under App Privacy) and include it in the app target:

<?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>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>NSPrivacyAccessedAPICategorySystemBootTime</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array><string>35F9.1</string></array>
    </dict>
  </array>
  <key>NSPrivacyTracking</key><false/>
  <key>NSPrivacyTrackingDomains</key><array/>
  <key>NSPrivacyCollectedDataTypes</key><array/>
</dict>
</plist>

If you collect data (analytics, accounts, crash reports), declare it under NSPrivacyCollectedDataTypes to match your App Store privacy labels.

Engine-specific notes

Third-party SDKs

Apple maintains a list of commonly used SDKs that must include their own privacy manifest and signature. Ads, analytics and attribution SDKs are on it. If the email names an SDK's framework, or you get ITMS-91061 (missing privacy manifest for a listed SDK), update that SDK to a version that ships a manifest; you cannot fix another SDK's declaration from your own file.

Check before you upload

In Xcode, archive the build, then in the Organizer right-click the archive and choose Generate Privacy Report. It merges every manifest in the app and shows what you are declaring, so you can spot missing categories before App Store Connect does.

Privacy and crash reporting

Crash and bug reporting is data collection too, and belongs in your declarations. Bugnet captures device model, OS and app version with each report and screenshots only when you enable them for the project. Bugnet imports your Google Play and App Store reviews every hour with device and OS details, files one- and two-star reviews that describe a bug as reports automatically, and its SDKs for Unity, Godot and Unreal mobile builds capture errors with the device attached.

Frequently asked questions

What is ITMS-91053 Missing API declaration?

Apple found calls to required reason APIs, such as UserDefaults or system boot time, in your app without a privacy manifest declaring an approved reason. Uploads without one are rejected.

Which reason code should a game use for UserDefaults?

CA92.1, when the data is only read and written by the app itself, such as settings and saves.

How do I fix ITMS-91053 in Unity?

Update to a recent Unity patch release that includes the engine’s privacy manifest, update third-party SDKs, and add a PrivacyInfo.xcprivacy for any remaining categories your own code uses.

The email names the binary. If it is an SDK, update the SDK; your own manifest cannot speak for it.