Privacy Manifest (PrivacyInfo.xcprivacy) — filen som alla applikationer och tredjeparts-SDK måste inkludera i iOS-bygget från och med våren 2024. Apple kräver deklaration av orsaker till användning av skyddade API (Required Reason API) och typer av insamlade data. Enligt Apple Developer Documentation, måste varje binär i applikationens sammansättning — huvudmål, ramverk, Swift Package Manager-beroenden — innehålla sitt eget Privacy Manifest.
Huvudpunkter
Privacy Manifest är filen PrivacyInfo.xcprivacy i formatet property list (XML), som deklarerar vilka datatyper applikationen samlar in och varför den använder vissa API. Apple introducerade manifest som en del av initiativet för att öka transparensen kring integritet, liknande Privacy Nutrition Label, men på kod- och binärnivå.
Huvudsyftet med manifestet är att dokumentera användningen av så kallade Required Reason API. Dessa är API-kategorier som kan användas för att ta digitalt fingeravtryck av enheten (fingerprinting), därför måste varje användning åtföljas av en deklaration av en specifik orsak från Apples godkända lista.
Från och med 1 maj 2024 avvisar Apple byggen som inte innehåller Privacy Manifest. Detta gäller både applikationens huvudmål och alla inbäddade SDK och beroenden. Enligt WWDC 2023 är manifestet obligatoriskt för alla applikationer som distribueras via App Store.
Manifestet måste finnas i varje binär — inte bara i huvudapplikationen, utan även i varje ramverk och statiskt bibliotek. Om ett tredjeparts-SDK inte har tillhandahållit ett manifest måste utvecklaren lägga till det manuellt eller kontakta SDK-leverantören för en uppdatering.
Innan manifesten kom kunde utvecklare använda omfattande system-API (åtkomst till filsystem, datum/tid, systemloggar) utan transparent förklaring av användningssyftet. Detta skapade risk för dataläckage via tredjeparts-SDK som kunde samla in information utan utvecklarens vetskap.
Enligt data från Mysk Inc. (2023) använde många populära SDK API för att ta enhetens fingeravtryck utan uppenbart behov — till exempel läste de upptid för att bestämma tidszon eller skannade kataloger för att samla in metadata. Privacy Manifest tvingar deklaration av varje sådan åtgärd.
Förutom Required Reason API innehåller manifestet avsnittet NSPrivacyTracking — en flagga som visar om applikationen använder spårning (kräver ATT) och NSPrivacyCollectedDataTypes — lista över insamlade datatyper i Privacy Nutrition Label-format.
Privacy Nutrition Label är en användarvänlig visning på applikationssidan i App Store, som visar vilka data applikationen samlar in. Privacy Manifest är en teknisk fil inuti binären som kontrolleras automatiskt av Apple. Om data i manifestet inte stämmer överens med etiketterna i App Store Connect avvisar Apple bygget.
Manifestet är således sanningens källa för Apples kontrollsystem. Baserat på det genereras integritetsetiketter automatiskt, men utvecklaren måste hålla båda representationerna uppdaterade. Ändring av manifestet efter publicering kräver att ett nytt bygge skickas för granskning.
Filen PrivacyInfo.xcprivacy använder property list-format med rottypen Dictionary. De viktigaste nycklarna på högsta nivån: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).
Nyckeln NSPrivacyTracking — ett booleskt värde som anger om applikationen använder spårning (kräver ATT). Om true måste även NSUserTrackingUsageDescription anges i Info.plist. Nyckeln NSPrivacyTrackingDomains — en array av domäner där spårning tillämpas.
Nyckeln NSPrivacyCollectedDataTypes — en array av ordböcker, som var och en beskriver typen av insamlade data: kategori (NSPrivacyCollectedDataType), obligatoriskhet (NSPrivacyCollectedDataTypeLinked), syfte (NSPrivacyCollectedDataTypePurposes). Syften inkluderar: märkning av tredje part, analys, produktutveckling och personalisering av innehåll.
Nyckeln NSPrivacyAccessedAPITypes — en array av ordböcker för varje kategori av Required Reason API: kategori (NSPrivacyAccessedAPITypeReasons) — specifik orsak från Apples godkända lista och NSPrivacyAccessedAPIType — identifierare för API-kategorin.
<!-- 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>
Datatyper delas in i flera kategorier: kontaktinformation (namn, e-post, telefon), ekonomi (betalningsdata), identifierare (IDFA, User ID), användningsdata (loggar, klick), diagnostik (crash logs) och användarinnehåll (foton, videor, filer). Varje kategori är dessutom märkt som „kopplad till användaren" (linked) eller „inte kopplad" (not linked).
Linked innebär att data är kopplad till användarkontot; not linked — data är aggregerad eller anonymiserad. Beroende på denna märkning visar Apple integritetsetiketten: linked-data markeras med gult, not linked — med grönt.
Apple har identifierat flera API-kategorier, där varje användning måste åtföljas av en specifik orsak från den godkända listan. Orsaken är en unik kod, till exempel C617.1 eller 35F9.1, som motsvarar ett specifikt syfte som godkänts av Apple.
Kategorin NSPrivacyAccessedAPICategoryFileTimestamp omfattar API för åtkomst till filers tidsstämplar (creationDate, modificationDate). Orsaker: C617.1 (filsynkronisering), 3B52.1 (säkerhetskopiering), 0A2A.1 (bedrägeriskydd).
Kategorin NSPrivacyAccessedAPICategoryDiskSpace omfattar API för kontroll av ledigt diskutrymme (NSFileManager. Kontroller (NSFileManager). Orsaker: E174.1 (cachehantering), 85F4.1 (nedladdning av innehåll), B728.1 (diagnostik).
Kategorin NSPrivacyAccessedAPICategorySystemBootTime omfattar API för åtkomst till systemets starttid (upptid). Det finns bara en orsak: 35F9.1 (mätning av sessionstid för analys). All annan användning betraktas som fingerprinting.
Varje kategori har 1 till 5 godkända orsaker. Utvecklaren är skyldig att välja den orsak som bäst motsvarar den faktiska användningen av API. Att lämna en oriktig orsak kan leda till avvisande av bygget eller blockering av kontot.
Från och med 1 maj 2024 måste alla tredjeparts-SDK — både binära och med öppen källkod — inkludera Privacy Manifest i sitt paket. Apple kontrollerar manifest för alla beroenden, och om minst ett SDK saknar manifest kommer bygget att avvisas.
Stora SDK (Firebase, Adjust, AppsFlyer, Facebook SDK) har redan uppdaterat sina paket. Om ditt projekt använder ett mindre känt SDK, kontrollera dess version och vid behov uppdatera det eller kontakta utvecklaren. En tillfällig lösning är att manuellt lägga till ett manifest för SDK i projektet, men detta rekommenderas inte på grund av avvikelser vid uppdateringar.
Privacy Info.xcprivacy kan skapas via den inbyggda mallen i Xcode 15+ eller manuellt. Vi undersöker båda alternativen.
I Xcode 15 har mallen Privacy Manifest lagts till: File → New → File → Resource → Privacy Manifest. Xcode skapar en fil med grundstruktur och fyller i NSPrivacyTracking och tomma arrayer för API och data. Efter skapandet måste du manuellt ange orsaker för varje använt Required Reason API.
Mallen lägger automatiskt till filen i huvudmålet. Om projektet har flera mål (Extensions, Watch app) måste manifestet läggas till i varje. Xcode kontrollerar inte förekomsten av manifest i beroenden under kompileringsfasen — endast under arkiveringsfasen.
// AppDelegate: kontroll av manifestet under utvecklingsfasen
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")
}
Du kan skapa PrivacyInfo.xcprivacy manuellt som en vanlig XML property list-fil. För att göra detta, skapa en fil med namnet PrivacyInfo.xcprivacy, skriv standardplisthuvudet och lägg till en rotordbok med nödvändiga nycklar. Se till att filen har lagts till i målet (Target Membership).
Den manuella metoden är användbar när du behöver lägga till ett manifest i ett statiskt bibliotek eller ett Package Manager-beroende utan att använda Xcode-gränssnittet. Efter kompilering, kontrollera om filen har kommit in i binären via kommandot nm eller arkivering.
Innan du skickar bygget till App Store måste du kontrollera att Privacy Manifest är korrekt och fullständigt. Apple tillhandahåller flera kontrollverktyg.
Vid arkivering av projektet (Product → Archive) utför Xcode en kontroll av manifesten. Om ett fel upptäcks — saknat manifest, felaktig orsak, tom kategori — avslutas arkiveringen med fel. Felloggen visas i Issue navigator med angivelse av det problematiska SDK och API-kategorin.
Ytterligare kontroll utförs av App Store Connect vid uppladdning av bygget. Om valideringen misslyckas avvisas bygget med ett automatiskt e-postmeddelande som innehåller identifieraren för det problematiska API och den rekommenderade korrigeringen.
För automatisering av kontrollen, använd skript som analyserar binären för användning av Required Reason API. Apple tillhandahåller verktyget libtool och skript för symbolkontroll, men communityn har utvecklat mer bekväma verktyg.
# Sökning efter användning av FileTimestamp API i binären
nm MyApp.app/MyApp | grep "NSFileCreationDate"
# Kontroll av förekomst av PrivacyInfo.xcprivacy i applikationen
find MyApp.app -name "*.xcprivacy"
Det vanligaste felet — saknat manifest i ett av SDK. Även om huvudmålet innehåller manifestet kontrollerar Apple alla binärer separat. Det näst vanligaste — felaktig orsakskod: användning av en orsak för en API-kategori med ett API från en annan kategori.
Det tredje felet — överdriven deklaration av API som faktiskt inte används. Utvecklare lägger till alla möjliga orsaker "för säkerhets skull", vilket oroar Apples granskare. Lägg endast till de kategorier som faktiskt används. Använd Xcodes statiska analysator för kontroll.
Vanliga frågor
Från 1 maj 2024 avvisar Apple varje bygge utan manifest. Felet uppstår vid uppladdning till App Store Connect. Gamla applikationer blockeras inte, men uppdateringar kräver obligatorisk inkludering av manifestet.
Ja, manifestet är obligatoriskt för alla Apple-plattformar: iOS, iPadOS, macOS, tvOS, watchOS och visionOS. Kraven för Required Reason API är enhetliga för alla plattformar, även om API-uppsättningarna kan skilja sig något.
Om SDK inte har tillhandahållit ett manifest, skapa en separat fil PrivacyInfo.xcprivacy och lägg till den i SDK-gruppen i projektet. Ange orsaker för de API som detta SDK använder baserat på SDK:s dokumentation.
Ja. Vid automatisk kontroll jämför Apple de deklarerade orsakerna med faktiska API-anrop. Avvikelse leder till avvisande. Vid manuell kontroll kan granskaren begära förklaring.
Ja, Apple kontrollerar manifest för alla beroenden, inklusive SPM. Paketleverantörer är skyldiga att inkludera PrivacyInfo.xcprivacy i sina databaser. Xcode varnar om saknade manifest vid arkivering.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också