Privacy Manifest — wat is het, bestand PrivacyInfo.xcprivacy en vereisten

Auteur: IT Sectr Gepubliceerd: 2026-05-20 Leestijd: 9 min

Privacy Manifest (PrivacyInfo.xcprivacy) — het bestand dat alle apps en SDK's van derden vanaf de lente van 2024 verplicht moeten opnemen in iOS-builds. Apple vereist dat de redenen voor het gebruik van beschermde API's (Required Reason API) en de typen verzamelde gegevens worden gedeclareerd. Volgens Apple Developer Documentation, moet elk binair bestand in de app — hoofddoel, frameworks, Swift Package Manager-afhankelijkheden — een eigen Privacy Manifest bevatten.

Belangrijkste punten

  • Privacy Manifest — XML-bestand PrivacyInfo.xcprivacy met declaratie van API-gebruiksredenen
  • Required Reason API — API-categorieën die verplichte redenopgave vereisen
  • SDK Privacy Manifest — elke SDK van derden moet een eigen manifest leveren
  • Redenen (Reasons) — specifiek doel van API-gebruik uit de goedgekeurde Apple-lijst
  • Deadline — vanaf 1 mei 2024 moeten alle nieuwe builds Privacy Manifest bevatten

Wat is Privacy Manifest?

Privacy Manifest is het bestand PrivacyInfo.xcprivacy in property list (XML)-formaat, dat declareert welke gegevenstypen de app verzamelt en waarom deze bepaalde API's gebruikt. Apple introduceerde manifesten als onderdeel van een initiatief voor transparantie van privacy, vergelijkbaar met Privacy Nutrition Label, maar op code- en binaire niveau.

Het hoofddoel van het manifest is het documenteren van het gebruik van zogenaamde Required Reason API's. Dit zijn API-categorieën die kunnen worden gebruikt voor het nemen van digitale vingerafdrukken van het apparaat (fingerprinting), dus elk gebruik moet vergezeld gaan van een declaratie van een specifieke reden uit de door Apple goedgekeurde lijst.

Vanaf 1 mei 2024 weigert Apple builds die geen Privacy Manifest bevatten. Dit geldt zowel voor de hoofddoelen van de app als voor alle ingebouwde SDK's en afhankelijkheden. Volgens WWDC 2023 is het manifest verplicht voor alle apps die via de App Store worden gedistribueerd.

Het manifest moet in elk binair bestand aanwezig zijn — niet alleen in de hoofdapp, maar ook in elk framework en elke statische bibliotheek. Als een SDK van derden geen manifest heeft geleverd, moet de ontwikkelaar het handmatig toevoegen of contact opnemen met de SDK-leverancier voor een update.

Waarom Apple Privacy Manifest heeft geïntroduceerd

Voordat manifesten verschenen, konden ontwikkelaars uitgebreide systeem-API's (toegang tot bestandssysteem, datum/tijd, systeemlogboeken) gebruiken zonder transparante uitleg van het gebruiksdoel. Dit creëerde risico op gegevenslekkage via SDK's van derden die informatie konden verzamelen zonder medeweten van de ontwikkelaar.

Volgens gegevens van Mysk Inc. (2023) gebruikten veel populaire SDK's API's voor het nemen van apparaatvingerafdrukken zonder duidelijke noodzaak — bijvoorbeeld het uitlezen van uptime-tijd voor het bepalen van de tijdzone of het scannen van mappen voor het verzamelen van metadata. Privacy Manifest verplicht het declareren van elke dergelijke actie.

Naast Required Reason API bevat het manifest de sectie NSPrivacyTracking — een vlag die aangeeft of de app tracking gebruikt (vereist ATT) en NSPrivacyCollectedDataTypes — een lijst van verzamelde gegevenstypen in Privacy Nutrition Label-formaat.

Verschil tussen Privacy Manifest en Privacy Nutrition Label

Privacy Nutrition Label is een gebruikersvriendelijke weergave op de app-pagina in de App Store, die laat zien welke gegevens de app verzamelt. Privacy Manifest is een technisch bestand in het binaire bestand dat automatisch door Apple wordt gecontroleerd. Als de gegevens in het manifest niet overeenkomen met de labels in App Store Connect, weigert Apple de build.

Het manifest is dus de bron van waarheid voor het controlesysteem van Apple. Op basis ervan worden automatisch privacylabels gegenereerd, maar de ontwikkelaar moet beide weergaven up-to-date houden. Het wijzigen van het manifest na publicatie vereist het indienen van een nieuwe build ter beoordeling.

Structuur van PrivacyInfo.xcprivacy

Het bestand PrivacyInfo.xcprivacy gebruikt het property list-formaat met het hoofdtype Dictionary. De belangrijkste sleutels op het hoogste niveau: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).

Sleutels op het hoogste niveau

De sleutel NSPrivacyTracking — een Booleaanse waarde die aangeeft of de app tracking gebruikt (vereist ATT). Indien true, moet ook NSUserTrackingUsageDescription in Info.plist worden vermeld. De sleutel NSPrivacyTrackingDomains — een array van domeinen waarop tracking wordt toegepast.

De sleutel NSPrivacyCollectedDataTypes — een array van woordenboeken, die elk het type verzamelde gegevens beschrijven: categorie (NSPrivacyCollectedDataType), verplichting (NSPrivacyCollectedDataTypeLinked), doel (NSPrivacyCollectedDataTypePurposes). Doelen omvatten: markering van derden, analyse, productontwikkeling en personalisatie van inhoud.

De sleutel NSPrivacyAccessedAPITypes — een array van woordenboeken voor elke categorie Required Reason API: categorie (NSPrivacyAccessedAPITypeReasons) — specifieke reden uit de goedgekeurde Apple-lijst en NSPrivacyAccessedAPIType — identificatie van de API-categorie.

xml
<!-- PrivacyInfo.xcprivacy -->
<?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>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Gegevenscategorieën in NSPrivacyCollectedDataTypes

Gegevenstypen zijn onderverdeeld in verschillende categorieën: contactgegevens (naam, e-mail, telefoon), financiën (betalingsgegevens), identificatiemiddelen (IDFA, User ID), gebruiksgegevens (logboeken, klikken), diagnostiek (crash logs) en gebruikersinhoud (foto's, video's, bestanden). Elke categorie is aanvullend gemarkeerd als „gekoppeld aan gebruiker" (linked) of „niet-gekoppeld" (not linked).

Linked betekent dat de gegevens zijn gekoppeld aan het gebruikersaccount; not linked — de gegevens zijn geaggregeerd of geanonimiseerd. Van deze markering hangt af hoe Apple het privacylabel weergeeft: linked-gegevens worden geel gemarkeerd, not linked — groen.

Welke API's vereisen redenopgave

Apple heeft verschillende API-categorieën onderscheiden, waarbij elk gebruik vergezeld moet gaan van een specifieke reden uit de goedgekeurde lijst. De reden is een unieke code, bijvoorbeeld C617.1 of 35F9.1, die overeenkomt met een specifiek door Apple toegestaan doel.

Belangrijkste categorieën Required Reason API

De categorie NSPrivacyAccessedAPICategoryFileTimestamp omvat API's voor toegang tot tijdstempels van bestanden (creationDate, modificationDate). Redenen: C617.1 (bestandssynchronisatie), 3B52.1 (back-up), 0A2A.1 (antifraude).

De categorie NSPrivacyAccessedAPICategoryDiskSpace omvat API's voor het controleren van vrije schijfruimte (NSFileManager. Controles (NSFileManager). Redenen: E174.1 (cachebeheer), 85F4.1 (inhoud downloaden), B728.1 (diagnostiek).

De categorie NSPrivacyAccessedAPICategorySystemBootTime omvat API's voor toegang tot de opstarttijd van het systeem (uptime). Er is slechts één reden: 35F9.1 (meten van sessietijd voor analyse). Elk ander gebruik wordt beschouwd als fingerprinting.

Volledige lijst van API-categorieën

  • FileTimestamp — toegang tot tijdstempels van bestanden, toegestaan voor synchronisatie en back-up
  • DiskSpace — controle van vrije ruimte, toegestaan voor cachebeheer en downloads
  • SystemBootTime — uptime-tijd, alleen toegestaan voor sessieanalyse
  • UserDefaults — toegang tot UserDefaults van andere apps, volledig verboden
  • ActiveKeyboards — lijst van actieve toetsenborden, toegestaan voor IME-ontwikkelaars
  • SystemAperture — grootte van de uitsparing op het scherm, toegestaan voor foto- en AR-apps

Elke categorie heeft 1 tot 5 goedgekeurde redenen. De ontwikkelaar is verplicht de reden te kiezen die het beste overeenkomt met het werkelijke gebruik van de API. Het verstrekken van een onjuiste reden kan leiden tot weigering van de build of blokkering van het account.

Vereisten voor SDK's van derden

Vanaf 1 mei 2024 zijn alle SDK's van derden — zowel binair als open source — verplicht Privacy Manifest in hun pakket op te nemen. Apple controleert manifesten voor alle afhankelijkheden, en als ten minste één SDK geen manifest heeft, wordt de build geweigerd.

Grote SDK's (Firebase, Adjust, AppsFlyer, Facebook SDK) hebben hun pakketten al bijgewerkt. Als uw project een minder bekende SDK gebruikt, controleer dan de versie en werk deze indien nodig bij of neem contact op met de ontwikkelaar. Een tijdelijke oplossing is het handmatig toevoegen van een manifest voor de SDK aan het project, maar dit wordt niet aanbevolen vanwege discrepanties bij updates.

Privacy Manifest maken in Xcode

Privacy Info.xcprivacy kan worden gemaakt via de ingebouwde sjabloon van Xcode 15+ of handmatig. We bekijken beide opties.

Maken via Xcode 15

In Xcode 15 is de sjabloon Privacy Manifest toegevoegd: File → New → File → Resource → Privacy Manifest. Xcode maakt een bestand met een basisstructuur en vult NSPrivacyTracking en lege arrays voor API's en gegevens in. Na het maken moet u handmatig de redenen voor elke gebruikte Required Reason API aangeven.

De sjabloon voegt het bestand automatisch toe aan het hoofddoel. Als het project meerdere doelen heeft (Extensions, Watch app), moet het manifest aan elk doel worden toegevoegd. Xcode controleert de aanwezigheid van het manifest in afhankelijkheden niet tijdens de compilatiefase — alleen tijdens de archiveringsfase.

swift
// AppDelegate: manifest controleren tijdens ontwikkelfase
import Foundation

func validatePrivacyManifest() {
    guard let path = Bundle.main.path(
        forResource: "PrivacyInfo", ofType: "xcprivacy"
    ) else {
        print("PrivacyInfo.xcprivacy not found")
        return
    }
    guard let dict = NSDictionary(contentsOfFile: path)
    else { return }
    print("Privacy manifest loaded: \(dict.count) keys")
}

Handmatig maken via XML

U kunt PrivacyInfo.xcprivacy handmatig maken als een gewoon XML property list-bestand. Maak hiervoor een bestand met de naam PrivacyInfo.xcprivacy, schrijf de standaard plist-kop en voeg een hoofdwoordenboek toe met de benodigde sleutels. Zorg ervoor dat het bestand is toegevoegd aan het doel (Target Membership).

De handmatige methode is handig wanneer u een manifest moet toevoegen aan een statische bibliotheek of Package Manager-afhankelijkheid zonder de Xcode-interface te gebruiken. Na compilatie controleert u of het bestand in het binaire bestand is terechtgekomen via de opdracht nm of archivering.

Manifest controleren voor publicatie

Voordat u de build naar de App Store verzendt, moet u controleren of het Privacy Manifest correct en volledig is. Apple biedt verschillende controle-instrumenten.

Ingebouwde validator van Xcode

Bij het archiveren van het project (Product → Archive) voert Xcode een controle van de manifesten uit. Als een fout wordt gedetecteerd — ontbrekend manifest, onjuiste reden, lege categorie — eindigt de archivering met een fout. Het foutenlogboek wordt weergegeven in de Issue-navigator met vermelding van de problematische SDK en API-categorie.

Een extra controle wordt uitgevoerd door App Store Connect bij het uploaden van de build. Als de validatie mislukt, wordt de build geweigerd met een automatische e-mail met de identificatie van de problematische API en de aanbevolen correctie.

Controle via de opdrachtregel

Voor automatisering van de controle gebruikt u scripts die het binaire bestand analyseren op gebruik van Required Reason API. Apple biedt het hulpprogramma libtool en scripts voor symboolcontrole, maar de community heeft handigere hulpprogramma's ontwikkeld.

bash
# Zoeken naar gebruik van FileTimestamp API in binaire bestand
nm MyApp.app/MyApp | grep "NSFileCreationDate"

# Controleren van aanwezigheid van PrivacyInfo.xcprivacy in de app
find MyApp.app -name "*.xcprivacy"

Veelvoorkomende validatiefouten

De meest voorkomende fout — het ontbreken van een manifest in een van de SDK's. Zelfs als het hoofddoel het manifest bevat, controleert Apple alle binaire bestanden afzonderlijk. De tweede meest voorkomende — een onjuiste redencode: het gebruik van een reden voor de ene API-categorie met een API uit een andere categorie.

De derde fout — overmatige declaratie van API's die in werkelijkheid niet worden gebruikt. Ontwikkelaars voegen alle mogelijke redenen toe „voor het geval dat", wat Apple-beoordelaars verontrust. Voeg alleen de categorieën toe die daadwerkelijk worden gebruikt. Gebruik de statische analyser van Xcode voor controle.

Veelgestelde vragen

Wat gebeurt er bij afwezigheid van Privacy Manifest?

Vanaf 1 mei 2024 weigert Apple elke build zonder manifest. De fout treedt op tijdens het uploaden naar App Store Connect. Oude apps worden niet geblokkeerd, maar updates vereisen verplichte opname van het manifest.

Is Privacy Manifest vereist voor iPadOS-apps?

Ja, het manifest is verplicht voor alle Apple-platforms: iOS, iPadOS, macOS, tvOS, watchOS en visionOS. De vereisten voor Required Reason API zijn uniform voor alle platforms, hoewel de API-sets enigszins kunnen verschillen.

Hoe voeg ik een manifest toe voor een SDK van derden?

Als de SDK geen manifest heeft geleverd, maakt u een apart bestand PrivacyInfo.xcprivacy en voegt u dit toe aan de SDK-groep in het project. Geef de redenen op voor de API's die deze SDK gebruikt op basis van de documentatie van de SDK.

Kan Apple een build weigeren vanwege een onjuiste reden?

Ja. Bij automatische controle vergelijkt Apple de gedeclareerde redenen met de daadwerkelijke API-aanroepen. Een discrepantie leidt tot weigering. Bij handmatige controle kan de beoordelaar om uitleg vragen.

Wordt Privacy Manifest gecontroleerd voor Swift Package Manager?

Ja, Apple controleert manifesten voor alle afhankelijkheden, inclusief SPM. Pakketleveranciers zijn verplicht PrivacyInfo.xcprivacy in hun repositories op te nemen. Xcode waarschuwt voor ontbrekende manifesten bij archivering.

Samenvatting

  • Privacy Manifest — verplicht bestand PrivacyInfo.xcprivacy voor alle apps en SDK's vanaf 2024
  • Required Reason API — 6 API-categorieën die declaratie van specifieke gebruiksreden vereisen
  • Redenen — unieke codes (C617.1, 35F9.1), elke categorie heeft 1-5 toegestane redenen
  • SDK — elke SDK van derden moet een eigen manifest in het binaire bestand hebben
  • Validatie — Xcode controleert het manifest bij archivering, App Store Connect bij uploaden
  • Deadlines — vanaf 1 mei 2024 moeten alle nieuwe builds het manifest bevatten
  • Maak PrivacyInfo.xcprivacy via de Xcode-sjabloon en declareer alleen werkelijk gebruikte API's

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook