Privacy Manifest — co to je, soubor PrivacyInfo.xcprivacy a požadavky

Autor: IT Sectr Publikováno: 2026-05-20 Doba čtení: 9 min

Privacy Manifest (PrivacyInfo.xcprivacy) — soubor, který všechny aplikace a SDK třetích stran musí povinně zahrnout do sestavení iOS od jara 2024. Apple vyžaduje deklaraci důvodů používání chráněných API (Required Reason API) a typů shromažďovaných údajů. Podle Apple Developer Documentation, každý binární soubor ve složení aplikace — hlavní cíl, frameworky, závislosti Swift Package Manager — musí obsahovat vlastní Privacy Manifest.

Hlavní body

  • Privacy Manifest — XML soubor PrivacyInfo.xcprivacy s deklarací důvodů použití API
  • Required Reason API — kategorie API vyžadující povinné uvedení důvodu
  • SDK Privacy Manifest — každé SDK třetí strany je povinno dodat vlastní manifest
  • Důvody (Reasons) — konkrétní účel použití API ze schváleného seznamu Apple
  • Termín — od 1. května 2024 všechna nová sestavení musí obsahovat Privacy Manifest

Co je Privacy Manifest?

Privacy Manifest je soubor PrivacyInfo.xcprivacy ve formátu property list (XML), který deklaruje, jaké typy dat aplikace shromažďuje a proč používá určitá API. Apple zavedl manifesty v rámci iniciativy na zvýšení transparentnosti soukromí, podobně jako Privacy Nutrition Label, ale na úrovni kódu a binárního souboru.

Hlavním účelem manifestu je dokumentování používání takzvaných Required Reason API. Jsou to kategorie API, které mohou být použity k sejmutí digitálního otisku zařízení (fingerprinting), proto každé jejich použití musí být doprovázeno deklarací konkrétního důvodu ze schváleného seznamu Apple.

Od 1. května 2024 Apple odmítá sestavení, která neobsahují Privacy Manifest. To se týká jak hlavních cílů aplikace, tak všech vestavěných SDK a závislostí. Podle WWDC 2023 je manifest povinný pro všechny aplikace distribuované přes App Store.

Manifest musí být přítomen v každém binárním souboru — nejen v hlavní aplikaci, ale také v každém frameworku a statické knihovně. Pokud SDK třetí strany neposkytlo manifest, musí jej vývojář přidat ručně nebo kontaktovat dodavatele SDK kvůli aktualizaci.

Proč Apple zavedl Privacy Manifest

Před objevením se manifestů mohli vývojáři používat rozsáhlá systémová API (přístup k souborovému systému, datu/času, systémovým protokolům) bez transparentního vysvětlení účelu použití. To vytvářelo riziko úniku dat prostřednictvím SDK třetích stran, která mohla shromažďovat informace bez vědomí vývojáře.

Podle údajů Mysk Inc. (2023) mnoho populárních SDK používalo API k sejmutí otisku zařízení bez zřejmé potřeby — například četly čas uptime pro určení časového pásma nebo skenovaly adresáře pro sběr metadat. Privacy Manifest zavazuje k deklaraci každé takové akce.

Kromě Required Reason API manifest obsahuje sekci NSPrivacyTracking — příznak, který ukazuje, zda aplikace používá sledování (vyžaduje ATT) a NSPrivacyCollectedDataTypes — seznam typů shromažďovaných údajů ve formátu Privacy Nutrition Label.

Rozdíl mezi Privacy Manifest a Privacy Nutrition Label

Privacy Nutrition Label je uživatelsky přívětivé zobrazení na stránce aplikace v App Store, které ukazuje, jaké údaje aplikace shromažďuje. Privacy Manifest je technický soubor uvnitř binárního souboru, který je automaticky kontrolován Apple. Pokud údaje v manifestu neodpovídají štítkům v App Store Connect, Apple sestavení odmítne.

Manifest je tedy zdrojem pravdy pro kontrolní systém Apple. Na jeho základě se automaticky generují štítky soukromí, ale vývojář musí udržovat obě zobrazení aktuální. Změna manifestu po publikaci vyžaduje odeslání nového sestavení ke kontrole.

Struktura PrivacyInfo.xcprivacy

Soubor PrivacyInfo.xcprivacy používá formát property list s kořenovým typem Dictionary. Hlavní klíče nejvyšší úrovně: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).

Klíče nejvyšší úrovně

Klíč NSPrivacyTracking — logická hodnota, která ukazuje, zda aplikace používá sledování (vyžaduje ATT). Pokud je true, je také nutné uvést NSUserTrackingUsageDescription v Info.plist. Klíč NSPrivacyTrackingDomains — pole domén, na kterých se sledování uplatňuje.

Klíč NSPrivacyCollectedDataTypes — pole slovníků, z nichž každý popisuje typ shromažďovaných údajů: kategorie (NSPrivacyCollectedDataType), povinnost (NSPrivacyCollectedDataTypeLinked), účel (NSPrivacyCollectedDataTypePurposes). Účely zahrnují: označování třetích stran, analýzu, vývoj produktu a personalizaci obsahu.

Klíč NSPrivacyAccessedAPITypes — pole slovníků pro každou kategorii Required Reason API: kategorie (NSPrivacyAccessedAPITypeReasons) — konkrétní důvod ze schváleného seznamu Apple a NSPrivacyAccessedAPIType — identifikátor kategorie 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>

Kategorie údajů v NSPrivacyCollectedDataTypes

Typy údajů se dělí do několika kategorií: kontaktní informace (jméno, e-mail, telefon), finance (platební údaje), identifikátory (IDFA, User ID), údaje o používání (protokoly, kliknutí), diagnostika (crash logs) a obsah uživatele (fotografie, videa, soubory). Každá kategorie je navíc označena jako „spojená s uživatelem" (linked) nebo „nespojená" (not linked).

Linked znamená, že údaje jsou spojeny s uživatelským účtem; not linked — údaje jsou agregovány nebo anonymizovány. Od tohoto označení závisí, jak Apple zobrazuje štítek soukromí: linked údaje jsou označeny žlutě, not linked — zeleně.

Která API vyžadují uvedení důvodu

Apple vyčlenil několik kategorií API, jejichž každé použití musí být doprovázeno konkrétním důvodem ze schváleného seznamu. Důvod je jedinečný kód, například C617.1 nebo 35F9.1, který odpovídá konkrétnímu účelu schválenému Apple.

Hlavní kategorie Required Reason API

Kategorie NSPrivacyAccessedAPICategoryFileTimestamp zahrnuje API pro přístup k časovým razítkům souborů (creationDate, modificationDate). Důvody: C617.1 (synchronizace souborů), 3B52.1 (zálohování), 0A2A.1 (protipodvodná ochrana).

Kategorie NSPrivacyAccessedAPICategoryDiskSpace zahrnuje API pro kontrolu volného místa na disku (NSFileManager. Kontroly (NSFileManager). Důvody: E174.1 (správa mezipaměti), 85F4.1 (stahování obsahu), B728.1 (diagnostika).

Kategorie NSPrivacyAccessedAPICategorySystemBootTime zahrnuje API pro přístup k času spuštění systému (uptime). Existuje pouze jeden důvod: 35F9.1 (měření času relace pro analýzu). Jakékoli jiné použití je považováno za fingerprinting.

Úplný seznam kategorií API

  • FileTimestamp — přístup k časovým razítkům souborů, povoleno pro synchronizaci a zálohování
  • DiskSpace — kontrola volného místa, povoleno pro správu mezipaměti a stahování
  • SystemBootTime — čas uptime, povoleno pouze pro analýzu relací
  • UserDefaults — přístup k UserDefaults jiných aplikací, zcela zakázáno
  • ActiveKeyboards — seznam aktivních klávesnic, povoleno pro vývojáře IME
  • SystemAperture — velikost výřezu na obrazovce, povoleno pro foto a AR aplikace

Každá kategorie má 1 až 5 schválených důvodů. Vývojář je povinen vybrat důvod, který nejpřesněji odpovídá skutečnému použití API. Poskytnutí nepravdivého důvodu může vést k odmítnutí sestavení nebo zablokování účtu.

Požadavky na SDK třetích stran

Od 1. května 2024 jsou všechna SDK třetích stran — jak binární, tak s otevřeným zdrojovým kódem — povinna zahrnout Privacy Manifest do svého balíčku. Apple kontroluje manifesty pro všechny závislosti, a pokud alespoň jedno SDK nemá manifest, sestavení bude odmítnuto.

Velká SDK (Firebase, Adjust, AppsFlyer, Facebook SDK) již své balíčky aktualizovala. Pokud váš projekt používá méně známé SDK, zkontrolujte jeho verzi a v případě potřeby jej aktualizujte nebo kontaktujte vývojáře. Dočasným řešením je ruční přidání manifestu za SDK do projektu, ale to se nedoporučuje kvůli nesouladům při aktualizacích.

Jak vytvořit Privacy Manifest v Xcode

Privacy Info.xcprivacy lze vytvořit pomocí vestavěné šablony Xcode 15+ nebo ručně. Zvážíme obě možnosti.

Vytvoření pomocí Xcode 15

V Xcode 15 byla přidána šablona Privacy Manifest: File → New → File → Resource → Privacy Manifest. Xcode vytvoří soubor se základní strukturou a vyplní NSPrivacyTracking a prázdná pole pro API a data. Po vytvoření je třeba ručně uvést důvody pro každé používané Required Reason API.

Šablona automaticky přidá soubor do hlavního cíle. Pokud má projekt několik cílů (Extensions, Watch app), je třeba manifest přidat do každého z nich. Xcode nekontroluje přítomnost manifestu v závislostech ve fázi kompilace — pouze ve fázi archivace.

swift
// AppDelegate: kontrola manifestu ve fázi vývoje
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")
}

Ruční vytvoření pomocí XML

PrivacyInfo.xcprivacy lze vytvořit ručně jako běžný XML property list soubor. K tomu vytvořte soubor s názvem PrivacyInfo.xcprivacy, napište standardní hlavičku plist a přidejte kořenový slovník s potřebnými klíči. Ujistěte se, že soubor byl přidán do cíle (Target Membership).

Ruční metoda je užitečná, když je třeba přidat manifest do statické knihovny nebo závislosti Package Manager bez použití rozhraní Xcode. Po kompilaci zkontrolujte, zda se soubor dostal do binárního souboru pomocí příkazu nm nebo archivace.

Kontrola manifestu před publikací

Před odesláním sestavení do App Store je třeba zkontrolovat, zda je Privacy Manifest správný a úplný. Apple poskytuje několik kontrolních nástrojů.

Vestavěný validátor Xcode

Při archivaci projektu (Product → Archive) Xcode provádí kontrolu manifestů. Pokud je zjištěna chyba — chybějící manifest, nesprávný důvod, prázdná kategorie — archivace končí chybou. Protokol chyb se zobrazí v Issue navigator s uvedením problematického SDK a kategorie API.

Dodatečná kontrola se provádí na straně App Store Connect při nahrávání sestavení. Pokud validace selže, sestavení je odmítnuto s automatickým e-mailem obsahujícím identifikátor problematického API a doporučenou opravu.

Kontrola pomocí příkazového řádku

Pro automatizaci kontroly používejte skripty, které analyzují binární soubor na použití Required Reason API. Apple poskytuje nástroj libtool a skripty pro kontrolu symbolů, ale komunita vyvinula pohodlnější nástroje.

bash
# Vyhledávání použití FileTimestamp API v binárním souboru
nm MyApp.app/MyApp | grep "NSFileCreationDate"

# Kontrola přítomnosti PrivacyInfo.xcprivacy v aplikaci
find MyApp.app -name "*.xcprivacy"

Časté chyby validace

Nejčastější chybou — chybějící manifest v jednom z SDK. I když hlavní cíl manifest obsahuje, Apple kontroluje všechny binární soubory samostatně. Druhou nejčastější — nesprávný kód důvodu: použití důvodu pro jednu kategorii API s API z jiné kategorie.

Třetí chybou — nadměrné deklarování API, která se ve skutečnosti nepoužívají. Vývojáři přidávají všechny možné důvody „pro jistotu", což znepokojuje recenzenty Apple. Přidávejte pouze kategorie, které jsou skutečně používány. Použijte statický analyzátor Xcode pro kontrolu.

Často kladené otázky

Co se stane při absenci Privacy Manifest?

Od 1. května 2024 Apple odmítá jakékoli sestavení bez manifestu. Chyba vzniká ve fázi nahrávání do App Store Connect. Staré aplikace nejsou blokovány, ale aktualizace vyžadují povinné zahrnutí manifestu.

Je Privacy Manifest vyžadován pro aplikace iPadOS?

Ano, manifest je povinný pro všechny platformy Apple: iOS, iPadOS, macOS, tvOS, watchOS a visionOS. Požadavky na Required Reason API jsou jednotné pro všechny platformy, i když sady API se mohou mírně lišit.

Jak přidat manifest za SDK třetí strany?

Pokud SDK neposkytlo manifest, vytvořte samostatný soubor PrivacyInfo.xcprivacy a přidejte jej do skupiny SDK v projektu. Uveďte důvody pro API, která toto SDK používá, na základě dokumentace SDK.

Může Apple odmítnout sestavení kvůli nesprávnému důvodu?

Ano. Při automatické kontrole Apple porovnává deklarované důvody se skutečnými voláními API. Nesoulad vede k odmítnutí. Při ruční kontrole může recenzent požádat o vysvětlení.

Kontroluje se Privacy Manifest pro Swift Package Manager?

Ano, Apple kontroluje manifesty pro všechny závislosti, včetně SPM. Dodavatelé balíčků jsou povinni zahrnout PrivacyInfo.xcprivacy do svých repozitářů. Xcode varuje o chybějících manifestech při archivaci.

Shrnutí

  • Privacy Manifest — povinný soubor PrivacyInfo.xcprivacy pro všechny aplikace a SDK od roku 2024
  • Required Reason API — 6 kategorií API vyžadujících deklaraci konkrétního důvodu použití
  • Důvody — jedinečné kódy (C617.1, 35F9.1), každá kategorie má 1-5 povolených důvodů
  • SDK — každé SDK třetí strany musí obsahovat vlastní manifest v binárním souboru
  • Validace — Xcode kontroluje manifest při archivaci, App Store Connect při nahrávání
  • Termíny — od 1. května 2024 všechna nová sestavení musí obsahovat manifest
  • Vytvořte PrivacyInfo.xcprivacy pomocí šablony Xcode a deklarujte pouze skutečně používaná API

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také