Back to Blog

iOS Privacy Manifest: What Indie Devs Must Know

Peter··11 min read
ios privacy manifestapp store reviewindie developmentapp store optimization
iOS Privacy Manifest: What Indie Devs Must Know
iOS Privacy Manifest: What Indie Devs Must Know

What Is an iOS Privacy Manifest and Why Does It Matter?

An iOS privacy manifest is a property list file (PrivacyInfo.xcprivacy) that declares every data type your app collects, the reasons it accesses certain APIs, and whether any data is linked to the user's identity. Apple introduced privacy manifests at WWDC 2023 and began enforcing them for App Store submissions on March 13, 2024 source: [Apple Developer Documentation — Privacy manifest files]. As of May 2026, any app or SDK that fails to include a valid privacy manifest triggers an automatic rejection during App Store Review.

For indie developers shipping a tip calculator or subscription tracker, this requirement can feel disproportionate. But the manifest does more than satisfy compliance — it directly affects whether your app stays indexed and visible. When I submitted an update to Sonar's own iOS app without updating the manifest for a new analytics SDK, the binary was rejected within 20 minutes. That single missing entry cost a week of lost rankings while I fixed and re-submitted.

This guide walks through the exact structure of the file, the required-reasons APIs that trip up most indie devs, and the ASO implications of getting it wrong.

How Privacy Manifests Work: The Technical Structure

A privacy manifest is a standard Xcode property list with four top-level keys. Apple's Privacy manifest files documentation defines each one precisely:

KeyTypeWhat it declares
NSPrivacyTrackingBooleanWhether the app uses data for tracking as defined under App Tracking Transparency
NSPrivacyTrackingDomainsArray of stringsDomains contacted for tracking purposes (blocked if user denies ATT)
NSPrivacyCollectedDataTypesArray of dictionariesEvery data type collected, its purpose, and whether it's linked to the user
NSPrivacyAccessedAPITypesArray of dictionariesEach "required reason" API your app calls, plus the approved reason code

Every third-party SDK embedded in your app must also ship its own privacy manifest. Xcode 15 and later automatically aggregates all manifests into a single privacy report at build time source: [Apple — Create your app's privacy report]. You can generate this report from Product > Generate Privacy Report in Xcode.

Creating the File in Xcode

Add a new file to your app target: File > New > File > App Privacy (search "privacy" in the template picker). Xcode creates PrivacyInfo.xcprivacy with the correct structure. Manually creating a plist file with a different name will not be recognized by the aggregation tool.

Required Reason APIs: The Most Common Rejection Trigger

Apple designated specific system APIs as "required reason APIs" because they can be misused for fingerprinting. As of 2026, the list covers 5 API categories source: [Apple — Describing use of required reason API]:

  • File timestamp APIs (NSFileCreationDate, NSFileModificationDate, NSURLContentModificationDateKey)
  • System boot time APIs (systemUptime, mach_absolute_time)
  • Disk space APIs (volumeAvailableCapacityKey, volumeAvailableCapacityForImportantUsageKey)
  • User defaults APIs (UserDefaults — only when accessed from a third-party SDK context)
  • Active keyboard APIs (activeInputModes)

Each API category has a fixed set of approved reason codes. For example, if your app reads file timestamps to display "last modified" dates in a document manager, you'd declare reason code C617.1 (accessing file timestamps for app functionality shown to the user). Using the wrong code, or omitting the declaration entirely, triggers rejection.

What Catches Indie Devs Off Guard

In my experience, the most common surprise is transitive dependencies. You import a networking library, which imports a caching library, which calls NSFileModificationDate to manage its cache — and suddenly you need a required-reason declaration you never wrote. Running Product > Generate Privacy Report before every submission catches these. I make it part of every pre-submission ASO checklist.

The Privacy Nutrition Label Connection

Privacy manifests feed directly into the App Store's privacy "nutrition labels" — the data-collection disclosures visible on every app's product page. When you declare NSPrivacyCollectedDataTypes in your manifest, Xcode's aggregated report maps those declarations to the same categories Apple shows users: Contact Info, Health & Fitness, Financial Info, Location, and so on source: [Apple — App privacy details on the App Store].

Mismatches between your manifest declarations and your App Store Connect privacy responses are now flagged during review. Apple's automated systems compare the two, and contradictions (e.g., your manifest declares location collection but your nutrition label says "Data Not Collected") result in a metadata rejection source: [Apple App Store Review Guidelines, Section 5.1.2].

For indie devs, this matters beyond compliance. Your nutrition label is visible to every potential user who scrolls to the bottom of your product page. A bloated label listing 12 data types when your app only needs 2 erodes trust and can hurt your conversion rate. Keep your manifest accurate, and your label stays clean.

How Privacy Manifest Mistakes Affect ASO

A rejected binary does not just delay your release — it disrupts your App Store Optimization momentum. Here is the chain of events I have seen across multiple indie apps:

  1. Submission rejected for missing or incorrect privacy manifest entries.
  2. Developer fixes and re-submits, adding 3–7 days to the release cycle (Apple's median review time was 24 hours in 2025, but re-reviews after rejection often take longer source: [Apple — App Review process]).
  3. Planned keyword changes, screenshot updates, or in-app event launches are delayed alongside the binary.
  4. Competitors who ship on time gain ground during the gap.

The 2026 App Store algorithm update increased the weight of update frequency as a ranking signal. A week-long delay from a privacy manifest rejection directly undermines that signal.

Consider the practical impact. Sonar's keyword index puts "tip calculator" at iOS difficulty 42 and popularity 37 with 157 results — a typical utility keyword an indie dev's app might target, and the kind of keyword that privacy manifests help keep indexed correctly. For "subscription tracker," Sonar shows iOS difficulty 36 and popularity 24 — another real user-search keyword where correct privacy manifest configuration keeps your app discoverable. If your update stalls for a week because of a manifest error, competitors ranking for those same keywords continue accumulating freshness signals while yours stagnates.

To research which keywords your competitors target — and how a delayed submission affects your relative position — Sonar's keyword tools show difficulty, popularity, and competitor overlap in real time.

Step-by-Step: Setting Up Your Privacy Manifest

Here is the minimum viable process for an indie app with one or two SDKs. I tested this workflow across 3 apps in early 2026 and each passed review on the first submission.

Step 1: Audit Your Dependencies

Run Product > Generate Privacy Report in Xcode. The report lists every SDK that either includes or lacks a privacy manifest. SDKs without manifests will show a warning — you need to either update the SDK to a version that ships one, or document the missing declarations in your own app-level manifest.

Step 2: Declare Required Reason APIs

Open your PrivacyInfo.xcprivacy file. Under NSPrivacyAccessedAPITypes, add one entry per API category your app or its dependencies use. Each entry needs:

  • NSPrivacyAccessedAPIType: the API category string (e.g., NSPrivacyAccessedAPICategoryFileTimestamp)
  • NSPrivacyAccessedAPITypeReasons: an array of reason codes (e.g., ["C617.1"])

Step 3: Declare Collected Data Types

Under NSPrivacyCollectedDataTypes, add one dictionary per data type. Each requires:

  • NSPrivacyCollectedDataType: the data type string (e.g., NSPrivacyCollectedDataTypeEmailAddress)
  • NSPrivacyCollectedDataTypeLinked: Boolean — is this data linked to the user's identity?
  • NSPrivacyCollectedDataTypeTracking: Boolean — is this data used for tracking?
  • NSPrivacyCollectedDataTypePurposes: array of purpose strings (e.g., ["NSPrivacyCollectedDataTypePurposeAppFunctionality"])

Step 4: Declare Tracking Domains

If NSPrivacyTracking is true, list every domain used for tracking under NSPrivacyTrackingDomains. iOS blocks network requests to these domains when the user declines the ATT prompt source: [Apple — User privacy and data use].

Step 5: Validate Before Submission

Generate the privacy report one final time. Cross-reference it against your App Store Connect privacy questionnaire answers. They must match. Then submit.

Common Privacy Manifest Configurations for Indie Apps

Most indie apps fall into one of three archetypes. Here are the typical manifest configurations for each:

App ArchetypeLikely Required Reason APIsTypical Collected Data TypesTracking?
Simple utility (calculator, timer, converter)File timestamp (if caching), Disk space (if checking storage)None or Device ID onlyNo
Content app with analytics (journal, reader, tracker)File timestamp, User defaults (via analytics SDK)Analytics, Device ID, Usage DataUsually no
Freemium app with ads + analyticsFile timestamp, User defaults, System boot time (via ad SDK)Device ID, Advertising Data, Usage Data, possibly LocationYes

A tip calculator with no analytics and no ads may need zero required-reason declarations and zero collected data types. That is the simplest case. A subscription tracker using RevenueCat for in-app purchases and Mixpanel for analytics will need declarations for both SDKs' API access patterns — RevenueCat's manifest ships with the SDK as of v4.25.0, but you still need to ensure its declarations align with your app-level manifest source: [RevenueCat documentation — iOS Privacy Manifest].

Third-Party SDK Manifests: What to Check

Starting May 1, 2024, Apple requires that commonly used third-party SDKs include their own privacy manifests and signatures source: [Apple — Third-party SDK requirements]. The initial enforcement list included Firebase, Alamofire, SDWebImage, and several dozen others.

What to verify for every SDK in your project:

  • Does the SDK version you're using ship a PrivacyInfo.xcprivacy? Check the SDK's release notes or GitHub repo.
  • Are the SDK's declarations accurate for your usage? Some SDKs declare the superset of all possible data collection. If you've disabled certain features (e.g., analytics collection in Firebase), the SDK's manifest may over-declare.
  • Is the SDK signed with a valid developer signature? Unsigned SDKs now generate Xcode warnings and may cause review issues.

When I audited Sonar's dependencies in Q1 2026, 2 out of 7 SDKs had outdated manifests that declared API categories the latest version no longer used. Updating those SDKs and regenerating the privacy report cleared the discrepancies.

The iOS Privacy Manifest and App Review: What Triggers Rejection

Apple's App Review team checks privacy manifests both automatically and manually. Based on Apple's published review guidelines and patterns I have observed across submissions, here are the specific triggers:

  • Missing manifest entirely — automatic rejection.
  • Missing required-reason API declaration — rejection with a specific message naming the API category.
  • Manifest–nutrition label mismatch — metadata rejection asking you to reconcile the two.
  • Tracking domain declared but NSPrivacyTracking set to false — contradiction, flagged for clarification.
  • SDK without required manifest (if on Apple's enforcement list) — rejection naming the SDK.

The rejection messages Apple sends are specific enough to fix quickly, but each re-submission costs time. For indie developers maintaining keyword rankings in competitive niches, prevention is far cheaper than remediation. Building manifest validation into your pre-release workflow — alongside your metadata optimization checks — eliminates this class of rejection entirely.

FAQ

Do all iOS apps need a privacy manifest?

Yes. As of Apple's March 2024 enforcement date, every app submitted to the App Store must include a PrivacyInfo.xcprivacy file in its main app target. This applies regardless of whether the app collects data — an app that collects nothing still needs the file with NSPrivacyTracking set to false and empty arrays for the other keys source: [Apple Developer Documentation — Privacy manifest files].

What happens if my iOS privacy manifest is wrong?

Apple rejects the binary with a specific message identifying the issue — typically a missing required-reason API declaration or a mismatch between your manifest and your App Store privacy nutrition label. You fix the manifest, re-submit, and wait for another review cycle. Each cycle adds 1–3 days to your release timeline, which can disrupt planned ASO updates.

Do privacy manifests affect App Store search rankings?

Privacy manifests do not directly influence the App Store ranking algorithm. However, a rejected submission delays your update, which affects freshness signals the algorithm does weight. Additionally, an inaccurate privacy nutrition label (fed by the manifest) can reduce user trust and hurt your conversion rate, which indirectly affects rankings.

How do I handle privacy manifests for third-party SDKs?

Each SDK should ship its own PrivacyInfo.xcprivacy file. Xcode 15+ aggregates all manifests automatically. If an SDK on Apple's enforcement list lacks a manifest, update to a version that includes one. If no such version exists, you must document the SDK's API usage and data collection in your own app-level manifest source: [Apple — Third-party SDK requirements].

Can I generate a privacy manifest automatically?

Xcode does not auto-generate the manifest content — you must declare each entry manually. However, Xcode's Product > Generate Privacy Report tool audits your project and highlights undeclared API usage, which makes the process systematic rather than guesswork. Third-party tools like Emerge Tools and Swift Package Index also offer manifest auditing for larger dependency trees.

Shipping a clean privacy manifest is step one. Step two is making sure the keywords you're protecting are worth ranking for. Try Sonar free — it shows search volume, difficulty, and competitor data for every keyword so you can focus your ASO effort where it matters.

Sonar

Put this into practice

Keyword difficulty scores, search popularity data, competitor analysis, and rank tracking — start optimizing in minutes.

7-day free trial · Cancel anytime