Privacy Manifest (PrivacyInfo.xcprivacy) — ang file na dapat isama ng lahat ng application at third-party SDK sa iOS build simula noong tagsibol ng 2024. Apple ay nangangailangan ng deklarasyon ng mga dahilan ng paggamit ng mga protektadong API (Required Reason API) at mga uri ng nakolektang data. Ayon sa Apple Developer Documentation, bawat binary sa komposisyon ng application — pangunahing target, frameworks, Swift Package Manager dependencies — ay dapat maglaman ng sariling Privacy Manifest.
Mga Pangunahing Punto
Ang Privacy Manifest ay ang file na PrivacyInfo.xcprivacy sa property list (XML) na format, na nagdedeklara kung anong mga uri ng data ang kinokolekta ng application at kung bakit ito gumagamit ng ilang partikular na API. Ipinakilala ng Apple ang mga manifest bilang bahagi ng inisyatiba upang pataasin ang transparency ng privacy, katulad ng Privacy Nutrition Label, ngunit sa antas ng code at binary.
Ang pangunahing layunin ng manifest ay idokumento ang paggamit ng tinatawag na Required Reason API. Ito ay mga kategorya ng API na maaaring gamitin para sa pagkuha ng digital fingerprint ng device (fingerprinting), kaya ang bawat paggamit ay dapat may kasamang deklarasyon ng isang tiyak na dahilan mula sa aprubadong listahan ng Apple.
Simula Mayo 1, 2024, tinatanggihan ng Apple ang mga build na hindi naglalaman ng Privacy Manifest. Ito ay nalalapat kapwa sa mga pangunahing target ng application at sa lahat ng naka-embed na SDK at dependencies. Ayon sa WWDC 2023, ang manifest ay sapilitan para sa lahat ng application na ipinamamahagi sa pamamagitan ng App Store.
Ang manifest ay dapat na naroroon sa bawat binary — hindi lamang sa pangunahing application, kundi pati na rin sa bawat framework at static na library. Kung ang isang third-party SDK ay hindi nagbigay ng manifest, ang developer ay dapat na manu-manong idagdag ito o makipag-ugnayan sa provider ng SDK para sa isang update.
Bago lumitaw ang mga manifest, ang mga developer ay maaaring gumamit ng malawak na system API (access sa file system, petsa/oras, system log) nang walang transparent na paliwanag ng layunin ng paggamit. Ito ay lumikha ng panganib ng pagtagas ng data sa pamamagitan ng third-party SDK na maaaring mangolekta ng impormasyon nang walang kaalaman ng developer.
Ayon sa datos ng Mysk Inc. (2023), maraming sikat na SDK ang gumamit ng API para sa pagkuha ng fingerprint ng device nang walang malinaw na pangangailangan — halimbawa, binabasa ang uptime time para sa pagtukoy ng time zone o nag-scan ng mga direktoryo para sa pagkolekta ng metadata. Ang Privacy Manifest ay nag-oobliga ng deklarasyon ng bawat naturang aksyon.
Bukod sa Required Reason API, ang manifest ay may kasamang seksyong NSPrivacyTracking — isang bandila na nagpapahiwatig kung ang application ay gumagamit ng tracking (nangangailangan ng ATT) at NSPrivacyCollectedDataTypes — listahan ng mga uri ng nakolektang data sa format na Privacy Nutrition Label.
Ang Privacy Nutrition Label ay isang user-friendly na pagpapakita sa pahina ng application sa App Store, na nagpapakita kung anong data ang kinokolekta ng application. Ang Privacy Manifest ay isang teknikal na file sa loob ng binary na awtomatikong sinusuri ng Apple. Kung ang data sa manifest ay hindi tumutugma sa mga label sa App Store Connect, tinatanggihan ng Apple ang build.
Kaya, ang manifest ay ang pinagmumulan ng katotohanan para sa sistema ng pagsusuri ng Apple. Batay dito, awtomatikong nabubuo ang mga label ng privacy, ngunit dapat panatilihin ng developer ang parehong representasyon na napapanahon. Ang pagbabago ng manifest pagkatapos ng publikasyon ay nangangailangan ng pagpapadala ng bagong build para sa pagsusuri.
Ang file na PrivacyInfo.xcprivacy ay gumagamit ng property list na format na may root type na Dictionary. Ang mga pangunahing key sa pinakamataas na antas: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).
Ang key na NSPrivacyTracking — boolean value na nagpapahiwatig kung ang application ay gumagamit ng tracking (nangangailangan ng ATT). Kung true, dapat ding tukuyin ang NSUserTrackingUsageDescription sa Info.plist. Ang key na NSPrivacyTrackingDomains — array ng mga domain kung saan inilalapat ang tracking.
Ang key na NSPrivacyCollectedDataTypes — array ng mga diksyunaryo, bawat isa ay naglalarawan ng uri ng nakolektang data: kategorya (NSPrivacyCollectedDataType), obligasyon (NSPrivacyCollectedDataTypeLinked), layunin (NSPrivacyCollectedDataTypePurposes). Kasama sa mga layunin ang: pagmamarka ng mga third party, analytics, pagpapaunlad ng produkto at pag-personalize ng nilalaman.
Ang key na NSPrivacyAccessedAPITypes — array ng mga diksyunaryo para sa bawat kategorya ng Required Reason API: kategorya (NSPrivacyAccessedAPITypeReasons) — tiyak na dahilan mula sa aprubadong listahan ng Apple at NSPrivacyAccessedAPIType — identifier ng kategorya ng API.
<!-- 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>
Ang mga uri ng data ay nahahati sa ilang kategorya: impormasyon ng contact (pangalan, email, telepono), pananalapi (data ng pagbabayad), mga identifier (IDFA, User ID), data ng paggamit (log, click), diagnostic (crash logs) at nilalaman ng user (mga larawan, video, file). Bawat kategorya ay may karagdagang marka bilang „nakaugnay sa user" (linked) o „hindi nakaugnay" (not linked).
Ang linked ay nangangahulugan na ang data ay nakaugnay sa account ng user; ang not linked — ang data ay pinagsama-sama o na-anonymize. Depende sa markang ito kung paano ipinapakita ng Apple ang label ng privacy: ang linked data ay minarkahan ng dilaw, ang not linked — berde.
Ang Apple ay nagtalaga ng ilang kategorya ng API, na ang bawat paggamit ay dapat may kasamang tiyak na dahilan mula sa aprubadong listahan. Ang dahilan ay isang natatanging code, halimbawa C617.1 o 35F9.1, na tumutugma sa isang tiyak na layunin na pinapayagan ng Apple.
Ang kategoryang NSPrivacyAccessedAPICategoryFileTimestamp ay may kasamang API para sa pag-access sa mga timestamp ng file (creationDate, modificationDate). Mga dahilan: C617.1 (pag-sync ng file), 3B52.1 (backup), 0A2A.1 (anti-fraud).
Ang kategoryang NSPrivacyAccessedAPICategoryDiskSpace ay may kasamang API para sa pagsusuri ng libreng espasyo sa disk (NSFileManager. Mga pagsusuri (NSFileManager). Mga dahilan: E174.1 (pamamahala ng cache), 85F4.1 (pag-download ng nilalaman), B728.1 (diagnostic).
Ang kategoryang NSPrivacyAccessedAPICategorySystemBootTime ay may kasamang API ng pag-access sa oras ng pag-boot ng system (uptime). Mayroon lamang isang dahilan: 35F9.1 (pagsukat ng oras ng session para sa analytics). Anumang iba pang paggamit ay itinuturing na fingerprinting.
Bawat kategorya ay may 1 hanggang 5 aprubadong dahilan. Ang developer ay obligadong pumili ng dahilan na pinakaangkop sa aktwal na paggamit ng API. Ang pagbibigay ng hindi tamang dahilan ay maaaring humantong sa pagtanggi ng build o pag-block ng account.
Simula Mayo 1, 2024, lahat ng third-party SDK — parehong binary at open source — ay obligadong isama ang Privacy Manifest sa kanilang package. Sinusuri ng Apple ang mga manifest para sa lahat ng dependencies, at kung hindi bababa sa isang SDK ang walang manifest, ang build ay tatanggihan.
Ang mga malalaking SDK (Firebase, Adjust, AppsFlyer, Facebook SDK) ay na-update na ang kanilang mga package. Kung ang iyong proyekto ay gumagamit ng hindi gaanong kilalang SDK, suriin ang bersyon nito at kung kinakailangan i-update ito o makipag-ugnayan sa developer. Ang pansamantalang solusyon — manu-manong pagdagdag ng manifest para sa SDK sa proyekto, ngunit hindi ito inirerekomenda dahil sa mga pagkakaiba sa mga pag-update.
Ang Privacy Info.xcprivacy ay maaaring gawin sa pamamagitan ng built-in na template ng Xcode 15+ o manu-mano. Tatalakayin natin ang parehong opsyon.
Sa Xcode 15 ay idinagdag ang template ng Privacy Manifest: File → New → File → Resource → Privacy Manifest. Gumagawa ang Xcode ng file na may pangunahing istraktura at pinupunan ang NSPrivacyTracking at mga walang laman na array para sa API at data. Pagkatapos gawin, kailangan mong manu-manong tukuyin ang mga dahilan para sa bawat ginamit na Required Reason API.
Ang template ay awtomatikong nagdaragdag ng file sa pangunahing target. Kung ang proyekto ay may maraming target (Extensions, Watch app), kailangan mong idagdag ang manifest sa bawat isa. Hindi sinusuri ng Xcode ang pagkakaroon ng manifest sa mga dependencies sa yugto ng compilation — tanging sa yugto ng pag-archive.
// AppDelegate: pagsusuri ng manifest sa yugto ng pag-develop
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")
}
Maaari kang gumawa ng PrivacyInfo.xcprivacy nang manu-mano bilang isang ordinaryong XML property list file. Para dito, lumikha ng file na may pangalang PrivacyInfo.xcprivacy, isulat ang standard na header ng plist at magdagdag ng root dictionary na may mga kinakailangang key. Siguraduhin na ang file ay naidagdag sa target (Target Membership).
Ang manu-manong paraan ay kapaki-pakinabang kapag kailangan mong magdagdag ng manifest sa isang static na library o Package Manager dependency nang hindi ginagamit ang interface ng Xcode. Pagkatapos ng compilation, suriin kung ang file ay nakapasok sa binary sa pamamagitan ng utos na nm o pag-archive.
Bago ipadala ang build sa App Store, kailangan mong suriin kung ang Privacy Manifest ay tama at kumpleto. Ang Apple ay nagbibigay ng ilang mga tool sa pagsusuri.
Sa pag-archive ng proyekto (Product → Archive) ang Xcode ay nagsasagawa ng pagsusuri ng mga manifest. Kung may nakitang error — kawalan ng manifest, maling dahilan, walang laman na kategorya — ang pag-archive ay nagtatapos sa error. Ang log ng error ay ipinapakita sa Issue navigator na may indikasyon ng problematikong SDK at kategorya ng API.
Ang karagdagang pagsusuri ay isinasagawa ng App Store Connect sa pag-upload ng build. Kung ang validation ay nabigo, ang build ay tinatanggihan na may awtomatikong email na naglalaman ng identifier ng problematikong API at inirerekomendang pag-aayos.
Para sa automation ng pagsusuri, gumamit ng mga script na nagsusuri ng binary para sa paggamit ng Required Reason API. Apple ay nagbibigay ng tool na libtool at mga script ng pagsusuri ng simbolo, ngunit ang komunidad ay nakabuo ng mas maginhawang mga utility.
# Paghahanap ng paggamit ng FileTimestamp API sa binary
nm MyApp.app/MyApp | grep "NSFileCreationDate"
# Pagsusuri ng pagkakaroon ng PrivacyInfo.xcprivacy sa application
find MyApp.app -name "*.xcprivacy"
Ang pinakakaraniwang error — kawalan ng manifest sa isa sa mga SDK. Kahit na ang pangunahing target ay naglalaman ng manifest, sinusuri ng Apple ang lahat ng binary nang hiwalay. Ang pangalawa sa pinakakaraniwan — maling code ng dahilan: paggamit ng dahilan para sa isang kategorya ng API na may API mula sa ibang kategorya.
Ang pangatlong error — labis na deklarasyon ng mga API na hindi talaga ginagamit. Ang mga developer ay nagdaragdag ng lahat ng posibleng dahilan "kung sakali", na nag-aalarma sa mga tagasuri ng Apple. Idagdag lamang ang mga kategorya na talagang ginagamit. Gamitin ang static analyzer ng Xcode para sa pagsusuri.
Mga Madalas Itanong
Simula Mayo 1, 2024, tinatanggihan ng Apple ang anumang build na walang manifest. Ang error ay nangyayari sa yugto ng pag-upload sa App Store Connect. Ang mga lumang application ay hindi hinaharangan, ngunit ang mga update ay nangangailangan ng sapilitang pagsasama ng manifest.
Oo, ang manifest ay sapilitan para sa lahat ng platform ng Apple: iOS, iPadOS, macOS, tvOS, watchOS at visionOS. Ang mga kinakailangan para sa Required Reason API ay pare-pareho para sa lahat ng platform, bagaman ang mga set ng API ay maaaring bahagyang magkaiba.
Kung ang SDK ay hindi nagbigay ng manifest, lumikha ng hiwalay na file na PrivacyInfo.xcprivacy at idagdag ito sa grupo ng SDK sa proyekto. Tukuyin ang mga dahilan para sa API na ginagamit ng SDK na ito batay sa dokumentasyon ng SDK.
Oo. Sa awtomatikong pagsusuri, inihahambing ng Apple ang mga idineklarang dahilan sa aktwal na mga tawag sa API. Ang hindi pagkakatugma ay humahantong sa pagtanggi. Sa manu-manong pagsusuri, ang tagasuri ay maaaring humingi ng paliwanag.
Oo, sinusuri ng Apple ang mga manifest para sa lahat ng dependencies, kasama ang SPM. Ang mga provider ng package ay obligadong isama ang PrivacyInfo.xcprivacy sa kanilang mga repository. Nagbabala ang Xcode tungkol sa mga nawawalang manifest sa pag-archive.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din