Privacy Manifest — ce este, fișierul PrivacyInfo.xcprivacy și cerințele

Autor: IT Sectr Publicat: 2026-05-20 Timp de citire: 9 min

Privacy Manifest (PrivacyInfo.xcprivacy) — fișierul pe care toate aplicațiile și SDK-urile terțe sunt obligate să îl includă în compilarea iOS începând cu primăvara anului 2024. Apple cere declararea motivelor de utilizare a API-urilor protejate (Required Reason API) și a tipurilor de date colectate. Conform Apple Developer Documentation, fiecare binar din componența aplicației — targetul principal, framework-uri, dependențe Swift Package Manager — trebuie să conțină propriul Privacy Manifest.

Principalele puncte

  • Privacy Manifest — fișierul XML PrivacyInfo.xcprivacy cu declarația motivelor de utilizare a API
  • Required Reason API — categorii de API care necesită indicarea obligatorie a motivului
  • SDK Privacy Manifest — fiecare SDK terț este obligat să furnizeze propriul manifest
  • Motive (Reasons) — scopul concret de utilizare a API din lista aprobată de Apple
  • Termen limită — de la 1 mai 2024 toate compilările noi trebuie să includă Privacy Manifest

Ce este Privacy Manifest?

Privacy Manifest este fișierul PrivacyInfo.xcprivacy în format property list (XML), care declară ce tipuri de date colectează aplicația și de ce utilizează anumite API-uri. Apple a introdus manifestele în cadrul inițiativei de creștere a transparenței confidențialității, similar cu Privacy Nutrition Label, dar la nivel de cod și binar.

Scopul principal al manifestului este documentarea utilizării așa-numitelor Required Reason API. Acestea sunt categorii de API care pot fi folosite pentru preluarea amprentei digitale a dispozitivului (fingerprinting), prin urmare fiecare utilizare trebuie însoțită de declarația unui motiv concret din lista aprobată de Apple.

Începând cu 1 mai 2024, Apple respinge compilările care nu conțin Privacy Manifest. Acest lucru se aplică atât targeturilor principale ale aplicației, cât și tuturor SDK-urilor și dependențelor încorporate. Conform WWDC 2023, manifestul este obligatoriu pentru toate aplicațiile distribuite prin App Store.

Manifestul trebuie să fie prezent în fiecare binar — nu doar în aplicația principală, ci și în fiecare framework și bibliotecă statică. Dacă un SDK terț nu a furnizat manifestul, dezvoltatorul trebuie să îl adauge manual sau să contacteze furnizorul SDK pentru o actualizare.

De ce a introdus Apple Privacy Manifest

Înainte de apariția manifestelor, dezvoltatorii puteau utiliza API-uri extinse de sistem (acces la sistemul de fișiere, dată/oră, jurnale de sistem) fără o explicație transparentă a scopului utilizării. Acest lucru crea riscul de scurgere de date prin SDK-uri terțe, care puteau colecta informații fără știrea dezvoltatorului.

Conform datelor Mysk Inc. (2023), multe SDK-uri populare utilizau API-uri pentru preluarea amprentei dispozitivului fără o necesitate evidentă — de exemplu, citeau timpul uptime pentru determinarea fusului orar sau scanau directoare pentru colectarea metadatelor. Privacy Manifest obligă declararea fiecărei astfel de acțiuni.

Pe lângă Required Reason API, manifestul include secțiunea NSPrivacyTracking — un indicator care arată dacă aplicația utilizează tracking (necesită ATT) și NSPrivacyCollectedDataTypes — lista tipurilor de date colectate în format Privacy Nutrition Label.

Diferența dintre Privacy Manifest și Privacy Nutrition Label

Privacy Nutrition Label este o prezentare prietenoasă utilizatorului pe pagina aplicației din App Store, care arată ce date colectează aplicația. Privacy Manifest este un fișier tehnic în interiorul binarului, verificat automat de Apple. Dacă datele din manifest nu coincid cu etichetele din App Store Connect, Apple respinge compilarea.

Astfel, manifestul este sursa de adevăr pentru sistemul de verificare Apple. Pe baza lui se generează automat etichetele de confidențialitate, dar dezvoltatorul trebuie să mențină ambele reprezentări actualizate. Modificarea manifestului după publicare necesită trimiterea unei noi compilări pentru revizuire.

Structura PrivacyInfo.xcprivacy

Fișierul PrivacyInfo.xcprivacy utilizează formatul property list cu tipul rădăcină Dictionary. Principalele chei de nivel superior: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).

Chei de nivel superior

Cheia NSPrivacyTracking — valoarea booleană care indică dacă aplicația utilizează tracking (necesită ATT). Dacă este true, trebuie specificat și NSUserTrackingUsageDescription în Info.plist. Cheia NSPrivacyTrackingDomains — un array de domenii pe care se aplică tracking.

Cheia NSPrivacyCollectedDataTypes — un array de dicționare, fiecare descriind tipul datelor colectate: categoria (NSPrivacyCollectedDataType), obligativitatea (NSPrivacyCollectedDataTypeLinked), scopul (NSPrivacyCollectedDataTypePurposes). Scopurile includ: marcarea terților, analitică, dezvoltarea produsului și personalizarea conținutului.

Cheia NSPrivacyAccessedAPITypes — un array de dicționare pentru fiecare categorie Required Reason API: categoria (NSPrivacyAccessedAPITypeReasons) — motivul concret din lista aprobată de Apple și NSPrivacyAccessedAPIType — identificatorul categoriei API.

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>

Categorii de date în NSPrivacyCollectedDataTypes

Tipurile de date se împart în mai multe categorii: informații de contact (nume, email, telefon), finanțe (date de plată), identificatori (IDFA, User ID), date de utilizare (jurnale, clickuri), diagnosticare (crash logs) și conținutul utilizatorului (fotografii, video, fișiere). Fiecare categorie este suplimentar marcată ca „legată de utilizator" (linked) sau „nelegată" (not linked).

Linked înseamnă că datele sunt legate de contul utilizatorului; not linked — datele sunt agregate sau anonimizate. De această marcare depinde modul în care Apple afișează eticheta de confidențialitate: datele linked sunt marcate cu galben, not linked — cu verde.

Care API necesită indicarea motivelor

Apple a evidențiat mai multe categorii de API, fiecare utilizare trebuind să fie însoțită de un motiv concret din lista aprobată. Motivul este un cod unic, de exemplu C617.1 sau 35F9.1, care corespunde unui scop specific permis de Apple.

Categoriile principale de Required Reason API

Categoria NSPrivacyAccessedAPICategoryFileTimestamp include API-uri pentru accesul la timestamp-urile fișierelor (creationDate, modificationDate). Motive: C617.1 (sincronizare fișiere), 3B52.1 (backup), 0A2A.1 (antifraudă).

Categoria NSPrivacyAccessedAPICategoryDiskSpace include API-uri pentru verificarea spațiului liber pe disc (NSFileManager. Verificări (NSFileManager). Motive: E174.1 (gestionare cache), 85F4.1 (descărcare conținut), B728.1 (diagnosticare).

Categoria NSPrivacyAccessedAPICategorySystemBootTime include API-uri de acces la timpul de pornire a sistemului (uptime). Există un singur motiv: 35F9.1 (măsurarea timpului sesiunii pentru analitică). Orice altă utilizare este considerată fingerprinting.

Lista completă a categoriilor de API

  • FileTimestamp — acces la timestamp-urile fișierelor, permis pentru sincronizare și backup
  • DiskSpace — verificarea spațiului liber, permis pentru gestionarea cache-ului și descărcări
  • SystemBootTime — timpul uptime, permis doar pentru analitica sesiunilor
  • UserDefaults — acces la UserDefaults ale altor aplicații, complet interzis
  • ActiveKeyboards — lista tastaturilor active, permis pentru dezvoltatorii IME
  • SystemAperture — dimensiunea decupajului ecranului, permis pentru aplicații foto și AR

Fiecare categorie are între 1 și 5 motive aprobate. Dezvoltatorul este obligat să aleagă motivul care corespunde cel mai exact utilizării reale a API-ului. Furnizarea unui motiv fals poate duce la respingerea compilării sau blocarea contului.

Cerințe pentru SDK-urile terțe

Începând cu 1 mai 2024, toate SDK-urile terțe — atât binare, cât și cu cod sursă deschis — sunt obligate să includă Privacy Manifest în pachetul lor. Apple verifică manifestele pentru toate dependențele, iar dacă cel puțin un SDK nu are manifest, compilarea va fi respinsă.

SDK-urile mari (Firebase, Adjust, AppsFlyer, Facebook SDK) și-au actualizat deja pachetele. Dacă proiectul tău folosește un SDK mai puțin cunoscut, verifică versiunea acestuia și, dacă este necesar, actualizează-l sau contactează dezvoltatorul. O soluție temporară este adăugarea manuală a manifestului pentru SDK în proiect, dar nu este recomandată din cauza neconcordanțelor la actualizări.

Cum să creezi Privacy Manifest în Xcode

Privacy Info.xcprivacy poate fi creat prin șablonul încorporat Xcode 15+ sau manual. Vom analiza ambele variante.

Crearea prin Xcode 15

În Xcode 15 a fost adăugat șablonul Privacy Manifest: File → New → File → Resource → Privacy Manifest. Xcode creează un fișier cu o structură de bază și completează NSPrivacyTracking și array-urile goale pentru API și date. După creare, trebuie să indici manual motivele pentru fiecare Required Reason API utilizat.

Șablonul adaugă automat fișierul la targetul principal. Dacă proiectul are mai multe targeturi (Extensions, Watch app), trebuie să adaugi manifestul la fiecare. Xcode nu verifică prezența manifestului în dependențe în faza de compilare — doar în faza de arhivare.

swift
// AppDelegate: verificarea manifestului în faza de dezvoltare
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")
}

Crearea manuală prin XML

Poți crea PrivacyInfo.xcprivacy manual ca un fișier XML property list obișnuit. Pentru aceasta, creează un fișier cu numele PrivacyInfo.xcprivacy, scrie antetul standard plist și adaugă dicționarul rădăcină cu cheile necesare. Asigură-te că fișierul este adăugat la target (Target Membership).

Metoda manuală este utilă când trebuie să adaugi manifestul la o bibliotecă statică sau o dependență Package Manager fără a utiliza interfața Xcode. După compilare, verifică dacă fișierul a ajuns în binar prin comanda nm sau arhivare.

Verificarea manifestului înainte de publicare

Înainte de a trimite compilarea în App Store, trebuie să verifici că Privacy Manifest este corect și complet. Apple oferă mai multe instrumente de verificare.

Validatorul încorporat Xcode

La arhivarea proiectului (Product → Archive) Xcode efectuează verificarea manifestelor. Dacă este detectată o eroare — lipsa manifestului, motiv incorect, categorie goală — arhivarea se încheie cu eroare. Jurnalul erorilor este afișat în Issue navigator cu indicarea SDK-ului problematic și a categoriei API.

Verificarea suplimentară este efectuată de App Store Connect la încărcarea compilării. Dacă validarea eșuează, compilarea este respinsă cu un e-mail automat care conține identificatorul API-ului problematic și corecția recomandată.

Verificarea prin linia de comandă

Pentru automatizarea verificării, utilizează scripturi care analizează binarul pentru utilizarea Required Reason API. Apple oferă instrumentul libtool și scripturi de verificare a simbolurilor, dar comunitatea a dezvoltat utilitare mai convenabile.

bash
# Căutarea utilizării FileTimestamp API în binar
nm MyApp.app/MyApp | grep "NSFileCreationDate"

# Verificarea prezenței PrivacyInfo.xcprivacy în aplicație
find MyApp.app -name "*.xcprivacy"

Erori frecvente de validare

Cea mai frecventă eroare — lipsa manifestului într-unul dintre SDK-uri. Chiar dacă targetul principal conține manifestul, Apple verifică toate binarele separat. A doua ca frecvență — codul de motiv incorect: utilizarea unui motiv pentru o categorie de API cu API din altă categorie.

A treia eroare — declararea excesivă a API-urilor care de fapt nu sunt utilizate. Dezvoltatorii adaugă toate motivele posibile „pentru orice eventualitate", ceea ce îi alarmează pe revizorii Apple. Adaugă doar categoriile care sunt efectiv utilizate. Folosește analizorul static Xcode pentru verificare.

Întrebări frecvente

Ce se întâmplă în lipsa Privacy Manifest?

Începând cu 1 mai 2024, Apple respinge orice compilare fără manifest. Eroarea apare în faza de încărcare în App Store Connect. Aplicațiile vechi nu sunt blocate, dar actualizările necesită includerea obligatorie a manifestului.

Este necesar Privacy Manifest pentru aplicațiile iPadOS?

Da, manifestul este obligatoriu pentru toate platformele Apple: iOS, iPadOS, macOS, tvOS, watchOS și visionOS. Cerințele pentru Required Reason API sunt comune pentru toate platformele, deși seturile de API pot diferi ușor.

Cum să adaug manifestul pentru un SDK terț?

Dacă SDK-ul nu a furnizat manifestul, creează un fișier separat PrivacyInfo.xcprivacy și adaugă-l în grupul SDK-ului în proiect. Indică motivele pentru API-urile pe care le utilizează acest SDK, pe baza documentației SDK-ului.

Poate Apple respinge compilarea din cauza unui motiv incorect?

Da. La verificarea automată, Apple compară motivele declarate cu apelurile reale ale API-urilor. Neconcordanța duce la respingere. La verificarea manuală, revizorul poate solicita explicații.

Se verifică Privacy Manifest pentru Swift Package Manager?

Da, Apple verifică manifestele pentru toate dependențele, inclusiv SPM. Furnizorii de pachete sunt obligați să includă PrivacyInfo.xcprivacy în repozitoriile lor. Xcode avertizează despre manifestele lipsă la arhivare.

Rezumat

  • Privacy Manifest — fișier obligatoriu PrivacyInfo.xcprivacy pentru toate aplicațiile și SDK-urile din 2024
  • Required Reason API — 6 categorii de API care necesită declararea motivului concret de utilizare
  • Motive — coduri unice (C617.1, 35F9.1), fiecare categorie are 1-5 motive permise
  • SDK — fiecare SDK terț trebuie să includă propriul manifest în binar
  • Validare — Xcode verifică manifestul la arhivare, App Store Connect — la încărcare
  • Termene — de la 1 mai 2024 toate compilările noi trebuie să conțină manifestul
  • Creează PrivacyInfo.xcprivacy prin șablonul Xcode și declară doar API-urile efectiv utilizate

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și