Skip to content

AI & TechnologyITMS-91053 and ITMS-91061: Fix Privacy Manifest Emails

Simon Dziak
Simon Dziak
Founder & developer, App369
LinkedIn
October 18, 20267 min

Key takeaways

  • ITMS-91053 means code in your app or an SDK uses a required reason API without a reason in its privacy manifest. Apple says that since May 1, 2024, apps that don't describe that use aren't accepted by App Store Connect.
  • ITMS-91061 means a commonly used third-party SDK in your app, such as Flutter, shipped without a privacy manifest. Apple says that starting February 12, 2025, apps submitted for review must contain a valid manifest for a certain number of those SDKs.
  • Apple's required reason APIs fall into five categories: file timestamp, system boot time, disk space, active keyboards and user defaults. Each needs one or more approved reason codes.
  • Most Flutter fixes start with upgrading Flutter and running flutter pub upgrade, because many plugins added their manifests after the rules were announced. You only add your own PrivacyInfo.xcprivacy for code you wrote.
  • Never paste a privacy manifest from the internet. The Flutter team says a manifest is an attestation to Apple that you use data and APIs only in the ways it describes.

Pricing an app? Try the free app cost calculator or get a range for your project in the instant quote.

If App Store Connect emailed you ITMS-91053 or ITMS-91061, a PrivacyInfo.xcprivacy file is missing or incomplete, either in your own code or in a third-party SDK. ITMS-91053 is about required reason APIs used without a declared reason. ITMS-91061 is about a commonly used SDK, such as Flutter itself, that ships without a privacy manifest. In a Flutter app the fix is usually to upgrade Flutter and your plugins first, and to add your own manifest only for native code you wrote.

The facts below come from Apple's developer documentation, Apple's SDK requirements page, the Flutter team's comments on GitHub and the plugin manifests listed in the sources. I checked each one on October 18, 2026.

Disclosure: App369 is my studio. I build and fix Android and iOS apps, mostly in Flutter, and the last section mentions what I sell. Apple doesn't pay me for anything on this page.

What the two errors mean

CodeWhat the email saysWhat it means
ITMS-91053"Missing API declaration": your app's code references APIs that require reasons, and names categories such as NSPrivacyAccessedAPICategoryFileTimestamp or NSPrivacyAccessedAPICategoryUserDefaultsCode in your app or an SDK uses a required reason API, and no privacy manifest gives an approved reason for it
ITMS-91061"Missing privacy manifest": your app includes an SDK that was identified as a commonly used third-party SDK, for example Frameworks/Flutter.framework/FlutterThat SDK has no privacy manifest file

The wording comes from emails quoted in Flutter issues 145269 and 163455. Your email may differ a little, so read the file name it gives. That name is your first clue.

The dates

DateWhat Apple or the email saidSource
May 1, 2024Apps that don't describe their use of required reason APIs in their privacy manifest aren't accepted by App Store Connect. Apple's upcoming requirements page says you need approved reasons, including for third-party SDK code, to upload a new or updated appApple, required reason API, Apple, upcoming requirements
November 12, 2024An ITMS-91061 email posted in a Flutter issue says that from this date a new privacy-impacting SDK must include a manifestFlutter issue 156141
February 12, 2025Apple says apps submitted for review in App Store Connect must contain a valid privacy manifest for a certain number of commonly used third-party SDKsApple, adding a privacy manifest

Apple's SDK page says you must include the manifest for any listed SDK when you submit a new app that includes it, or an update that adds it. It also says signatures are required where the listed SDKs are used as binary dependencies, and that any version of a listed SDK is covered. That page didn't state a date when I read it, so I rely on the other Apple page for February 12, 2025.

The list includes Flutter, FirebaseCore, FirebaseAuth, FirebaseMessaging, path_provider, shared_preferences_ios, url_launcher, image_picker_ios, sqflite and many more. Check Apple's list for the plugins in your app.

The five required reason API categories

Apple describes these APIs as ones that could be misused to fingerprint a device or user. Each category goes in the NSPrivacyAccessedAPITypes array with one or more reason codes. These are the categories and the codes I read in Apple's documentation:

Category keyWhat it coversReason codes from Apple
NSPrivacyAccessedAPICategoryFileTimestampFile timestamps and metadata (fstat, lstat, getattrlist and similar)DDA9.1 display to the user, C617.1 files inside the app container, 3B52.1 files the user granted access to, 0A2A.1 third-party SDK wrapper
NSPrivacyAccessedAPICategorySystemBootTimeSystem boot time, such as mach_absolute_time35F9.1 measure elapsed time within the app, 8FFB.1 absolute timestamps for events in the app, 3D61.1 optional bug report
NSPrivacyAccessedAPICategoryDiskSpaceAvailable disk space (statfs, volume capacity keys and similar)85F4.1 display to the user, E174.1 check space before writing files, 7D9E.1 optional bug report, B728.1 health research apps
NSPrivacyAccessedAPICategoryActiveKeyboardsList of active keyboards3EC4.1 custom keyboard apps, 54BD.1 customize the UI based on the active keyboard
NSPrivacyAccessedAPICategoryUserDefaultsUserDefaultsCA92.1 data only the app itself can access, 1C8F.1 data shared in the same App Group, C56D.1 third-party SDK wrapper, AC6B.1 managed app configuration set by MDM

Each reason comes with limits. For example, Apple says information accessed for several of these reasons may not be sent off-device. Read the full text for your code before you pick one.

Find which SDK or plugin triggers it

  1. Read the email. It names the file. "Runner" means your app target, or a plugin built statically into it. A path like Frameworks/Flutter.framework/Flutter means that framework.
  2. Upgrade first. The Flutter team's guidance in issue 145269 (comment dated April 22, 2024) starts with flutter pub upgrade, because many plugins added their manifests after the rules came out.
  3. Look at what your build contains. The same guidance says to run find build/ios/iphoneos -name "*.xcprivacy" and look at each PrivacyInfo.xcprivacy inside the plugin bundles. Compare their declarations with the categories in your email. If all of them together don't cover the email, at least one dependency has no manifest.
  4. Try packaging plugins as frameworks. The same guidance says adding the use_frameworks! line from Flutter's Podfile template can change a warning from "Runner" to a named framework. Then you know which plugin to contact. Plugins that set static_framework = true override it.
  5. Search your own code. In ios/Runner.xcworkspace, use Find in Workspace for the APIs listed in the flagged category, and check whether the matches are in code you wrote or in a plugin.

The Flutter team also noted a bug in App Store Connect, at least as of April 2024, that could produce a warning for static frameworks that do declare their reasons. If your plugins all have manifests and the warning still names Runner, that comment is worth reading.

Add or edit PrivacyInfo.xcprivacy in Xcode

Do this only for code in your own app, or if an SDK can't be updated. Apple's steps:

  1. Open ios/Runner.xcworkspace in Xcode.
  2. Choose File > New File.
  3. Scroll to the Resource section and select the App Privacy File type, then click Next.
  4. Check the Runner target in the Targets list and click Create.

The file is named PrivacyInfo.xcprivacy by default, and that is the required name. Apple says the file must be in the target's resources for Xcode to use it, and that for an iOS app Xcode places it at the root of the app bundle.

A minimal manifest for an app whose own code reads and writes UserDefaults for itself looks like this. It matches the structure in Flutter's own plugin manifests:

<?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/>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Use this as a shape, not as an answer. The Flutter team warns that a manifest is an attestation to Apple that you use data and APIs only in the ways it describes, and that copying arbitrary text could misrepresent your app. Set NSPrivacyTracking to true and list domains only if your app tracks as Apple defines it. Fill NSPrivacyCollectedDataTypes to match what you collect.

Apple also says App Store Connect rejects submissions with invalid manifests, so use only the keys and values Apple documents.

Update Flutter, plugins and pods

  • Flutter itself. Flutter's engine source has a PrivacyInfo.xcprivacy for the iOS framework. A maintainer replied to someone on Flutter 2.5.3 that the version is more than three years old and predates framework privacy manifests, so it can't be published as a new app under Apple's rules. If your ITMS-91061 names Flutter, upgrade Flutter. My advice: if the upgrade breaks the iOS build, see the iOS build-failed-after-upgrade guide and the UIScene migration guide.
  • Plugins. Run flutter pub upgrade, then check the plugins on Apple's list against their changelogs. The shared_preferences iOS plugin, for example, declares UserDefaults with reason 1C8F.1 in its own manifest.
  • Pods. After a plugin update, run pod install from ios/ and rebuild. My advice: delete Pods and Podfile.lock first if CocoaPods keeps the old versions.
  • A plugin with no update. Ask its maintainer to add a manifest, replace the plugin, or as a last resort, declare its usage in your own manifest. Apple's documentation says an SDK can't rely on an app's manifest to report its own use, so this is a stopgap.

Check the archive and re-upload

  1. In Xcode, choose Product > Archive.
  2. In the Organizer, Control-click the archive and choose Generate Privacy Report.
  3. Choose where to save it and open the report in Preview.

Apple says the report aggregates the privacy manifests from your app and the third-party SDKs it links to, and that Xcode won't generate it correctly if you define your own collected data types or purposes instead of Apple's listed values. Then upload again and wait for the processing email.

If Apple's email points at an invalid manifest inside an SDK, Apple's documentation says to choose Window > Organizer, click Archives, Control-click your archive and choose Show in Finder, then Control-click it in the Finder and choose Show Package Contents. My advice: contact the SDK's developer first rather than editing a signed framework.

Need a hand?

If App Store Connect keeps rejecting your upload with ITMS-91053 or ITMS-91061, the App Fix Ticket covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days and comes as a pull request. Or send me a short description.

Frequently asked questions

What does ITMS-91053 Missing API declaration mean?
It means your app's code, or code in an SDK, references an API that Apple calls a required reason API, such as file timestamps or user defaults, and the privacy manifest doesn't give an approved reason for it. Apple says that starting May 1, 2024, apps that don't describe that use aren't accepted by App Store Connect.
What does ITMS-91061 Missing privacy manifest mean?
It means your app includes a third-party SDK from Apple's list of commonly used SDKs, and that SDK has no privacy manifest. For Flutter apps, the email I found in Flutter's issue tracker names Frameworks/Flutter.framework/Flutter. Upgrading to a Flutter version that ships a manifest is the usual fix.
Do I need my own PrivacyInfo.xcprivacy in a Flutter app?
Only if your own native code in ios/Runner uses required reason APIs, or an SDK without its own manifest forces you to. The Flutter team's guidance is that if every SDK in your dependency tree has its own manifest, your app's manifest should only need to describe usage directly in your app's code.
Which reason code do I use for UserDefaults?
Apple lists CA92.1 for reading and writing information that is only accessible to the app itself, and 1C8F.1 for apps, extensions and App Clips in the same App Group. Pick the one that matches what your code does. Don't copy a code just because another project used it.
How do I check what my archive declares?
In Xcode, choose Product > Archive, then Control-click the archive in the Organizer and choose Generate Privacy Report. Apple says it aggregates the privacy manifests from your app and the third-party SDKs it links to. For the file-level check, Flutter's guidance is to search the built app for .xcprivacy files.

Sources

  1. Apple Developer, Describing use of required reason API
  2. Apple Developer, NSPrivacyAccessedAPIType (categories and reason codes)
  3. Apple Developer, Privacy manifest files
  4. Apple Developer, Adding a privacy manifest to your app or third-party SDK
  5. Apple Developer, Describing data use in privacy manifests (privacy report)
  6. Apple Developer, Third-party SDK requirements
  7. Apple Developer, Upcoming requirements (Approved reasons for APIs, since May 1, 2024)
  8. Flutter on GitHub, issue 145269 (ITMS-91053 email text and the Flutter team's guidance)
  9. Flutter on GitHub, issue 131940 (privacy manifests in packages, and the warning about copying manifests)
  10. Flutter on GitHub, issue 156141 (ITMS-91061 email text, November 12, 2024)
  11. Flutter on GitHub, issue 163455 (ITMS-91061 email text, February 12, 2025)
  12. Flutter on GitHub, engine PrivacyInfo.xcprivacy for the iOS framework
  13. flutter/packages on GitHub, shared_preferences_foundation PrivacyInfo.xcprivacy
Tags
#itms-91053 #itms-91061 #itms-91053 missing api declaration #itms-91061 missing privacy manifest #privacyinfo.xcprivacy flutter #privacy manifest flutter #required reason api #nsprivacyaccessedapitypes #ca92.1 user defaults #app store connect privacy manifest email
Share:

Related Resources

Related guides