FREE TOOL · iOS DEVELOPMENT

Privacy Manifest Generator for iOS apps

Generate a valid PrivacyInfo.xcprivacy in 30 seconds. Covers Required Reasons APIs, tracking flag, and tracking domains. Pass App Review without the dreaded ITMS-91056 bounce.

Client-side. No signup. Nothing leaves your browser.

What's a Privacy Manifest? (read this if you've hit ITMS-91056)

Apple introduced Privacy Manifests at WWDC 2023 and made them mandatory for all App Store submissions in spring 2024. Every iOS app and every SDK has to ship a PrivacyInfo.xcprivacy file declaring two things:

  1. Tracking — does your app combine user data with data from other apps/websites for ad targeting or attribution? (NSPrivacyTracking + NSPrivacyTrackingDomains)
  2. Required Reasons APIs — Apple identified five Foundation/UIKit APIs that have been historically misused for fingerprinting. If you call any of them, you must declare which "approved reason" applies. (NSPrivacyAccessedAPITypes)

The five APIs: UserDefaults, file timestamps, systemUptime, disk space queries, active keyboards. Almost every app uses at least one — typically UserDefaults for app preferences and file timestamps for any document-handling UI.

If you skip the manifest or forget an API, App Review responds with ITMS-91056: Missing API declaration and bounces your build. Same-day fix once you know what's needed — which is what this tool is for.

For deeper context on the architecture and why Apple did this, see the Field Notes on iOS dev practice.

Tracking

Does your app use data for tracking (linking to other apps, ad networks, identifiers)? If you ship to consumer App Store and have any ads or attribution SDKs, the answer is usually yes. Indie utility apps with no ads → no.

Required Reasons APIs

For each Apple framework API your app touches, declare why. Skip even one and App Review bounces you. User Defaults and File Timestamp apply to almost every app — start there.

When you need this: You read or write anything via UserDefaults or @AppStorage anywhere in your app.
UserDefaults.standard@AppStorageUserDefaults(suiteName:)
When you need this: You read or display file timestamps anywhere — even just "Modified Yesterday" labels.
NSFileCreationDateNSFileModificationDatecreationDatecontentModificationDateKey

PrivacyInfo.xcprivacy

Live preview · valid plist XML

<?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>
</plist>

Where to put this

  1. Save the file as PrivacyInfo.xcprivacy
  2. In Xcode, drag it into your app target's main folder (not a subfolder of your code)
  3. When prompted, ✓ check "Copy items if needed" and ✓ your app target under "Add to targets"
  4. Build & archive — the manifest gets bundled into your .ipa automatically
  5. If you have SPM dependencies that ship their own privacy manifests, Xcode merges them — no action needed

Generated client-side, nothing leaves your browser. This tool covers Required Reasons APIs and Tracking — for the full NSPrivacyCollectedDataTypes (App Store nutrition labels), use Apple's wizard inside App Store Connect.

Privacy Manifest FAQ

Quick answers to the questions every iOS dev hits when running into Apple's privacy requirements for the first time.

Do I need a Privacy Manifest if my app uses no analytics?

Yes. Even with zero ads, zero analytics, and zero third-party SDKs, you almost certainly use UserDefaults or read file timestamps somewhere. Both are Required Reasons APIs that need to be declared. Apple requires the manifest for every app.

What happens if I submit without a Privacy Manifest?

App Review rejects the build with ITMS-91056: Missing API declaration. The rejection email lists the specific APIs your app touches but didn't declare. Add the manifest, re-archive, re-upload — usually a same-day fix.

How is this different from the App Store privacy nutrition labels?

They overlap but live in different places. The Privacy Manifest (PrivacyInfo.xcprivacy) ships inside your app bundle and declares Required Reasons APIs and tracking. The privacy nutrition labels live in App Store Connect and describe the data types you collect. Manifest = technical compliance. Labels = user-facing transparency. You need both.

My SPM dependencies have their own manifests. Do I still need one?

Yes. SPM and CocoaPods dependencies ship manifests covering their own code, and Xcode merges them automatically into your build. But your app target still needs its own manifest for whatever your code does (UserDefaults, file timestamps, etc.). Two distinct sources, merged at build time.

Does this tool send my data anywhere?

No. The XML is generated entirely in your browser as you click checkboxes. Nothing is uploaded, logged, or stored on our servers. The downloaded file is created by your browser. We don't even know what you generated.

Why doesn't this cover NSPrivacyCollectedDataTypes?

NSPrivacyCollectedDataTypes mirrors the App Store nutrition labels and Apple already provides a wizard for it inside App Store Connect. We focused this tool on the parts that block your build (Required Reasons APIs + Tracking) — the parts you can't easily do anywhere else. The empty <array/> in the output is intentional and accepted by Xcode.

NEWSLETTER

Field notes in your inbox.

One email a week — honest iOS dev write-ups from shipped apps. Swift, SwiftUI, SwiftData, and the rest of Apple's stack. No tutorials, no fluff.

  • Weekly. Honest. Skim-friendly.
  • Real bugs, real fixes, real tradeoffs.
  • No course pitches, no AI-generated filler.