Privacy Manifest — apa itu, file PrivacyInfo.xcprivacy dan persyaratan

Penulis: IT Sectr Diterbitkan: 2026-05-20 Waktu membaca: 9 mnt

Privacy Manifest (PrivacyInfo.xcprivacy) — file yang semua aplikasi dan SDK pihak ketiga wajib sertakan dalam build iOS mulai musim semi 2024. Apple mewajibkan deklarasi alasan penggunaan API yang dilindungi (Required Reason API) dan tipe data yang dikumpulkan. Menurut Apple Developer Documentation, setiap biner dalam komposisi aplikasi — target utama, framework, dependensi Swift Package Manager — harus berisi Privacy Manifest sendiri.

Poin Utama

  • Privacy Manifest — file XML PrivacyInfo.xcprivacy dengan deklarasi alasan penggunaan API
  • Required Reason API — kategori API yang memerlukan pencantuman alasan wajib
  • SDK Privacy Manifest — setiap SDK pihak ketiga wajib menyediakan manifest sendiri
  • Alasan (Reasons) — tujuan spesifik penggunaan API dari daftar yang disetujui Apple
  • Tenggat waktu — mulai 1 Mei 2024 semua build baru harus menyertakan Privacy Manifest

Apa itu Privacy Manifest?

Privacy Manifest adalah file PrivacyInfo.xcprivacy dalam format property list (XML), yang mendeklarasikan jenis data apa yang dikumpulkan aplikasi dan mengapa menggunakan API tertentu. Apple memperkenalkan manifest sebagai bagian dari inisiatif transparansi privasi, mirip dengan Privacy Nutrition Label, tetapi pada tingkat kode dan biner.

Tujuan utama manifest adalah mendokumentasikan penggunaan yang disebut Required Reason API. Ini adalah kategori API yang dapat digunakan untuk mengambil sidik jari digital perangkat (fingerprinting), oleh karena itu setiap penggunaannya harus disertai dengan deklarasi alasan spesifik dari daftar yang disetujui Apple.

Mulai 1 Mei 2024, Apple menolak build yang tidak menyertakan Privacy Manifest. Ini berlaku baik untuk target utama aplikasi maupun semua SDK dan dependensi bawaan. Menurut WWDC 2023, manifest wajib untuk semua aplikasi yang didistribusikan melalui App Store.

Manifest harus ada di setiap biner — tidak hanya di aplikasi utama, tetapi juga di setiap framework dan pustaka statis. Jika SDK pihak ketiga tidak menyediakan manifest, pengembang harus menambahkannya secara manual atau menghubungi penyedia SDK untuk pembaruan.

Mengapa Apple memperkenalkan Privacy Manifest

Sebelum munculnya manifest, pengembang dapat menggunakan API sistem yang ekstensif (akses ke sistem file, tanggal/waktu, log sistem) tanpa penjelasan transparan tentang tujuan penggunaan. Ini menciptakan risiko kebocoran data melalui SDK pihak ketiga yang dapat mengumpulkan informasi tanpa sepengetahuan pengembang.

Menurut data Mysk Inc. (2023), banyak SDK populer menggunakan API untuk mengambil sidik jari perangkat tanpa kebutuhan yang jelas — misalnya, membaca waktu uptime untuk menentukan zona waktu atau memindai direktori untuk mengumpulkan metadata. Privacy Manifest mewajibkan deklarasi setiap tindakan tersebut.

Selain Required Reason API, manifest menyertakan bagian NSPrivacyTracking — bendera yang menunjukkan apakah aplikasi menggunakan pelacakan (memerlukan ATT) dan NSPrivacyCollectedDataTypes — daftar tipe data yang dikumpulkan dalam format Privacy Nutrition Label.

Perbedaan antara Privacy Manifest dan Privacy Nutrition Label

Privacy Nutrition Label adalah tampilan ramah pengguna di halaman aplikasi di App Store, yang menunjukkan data apa yang dikumpulkan aplikasi. Privacy Manifest adalah file teknis di dalam biner yang diperiksa secara otomatis oleh Apple. Jika data dalam manifest tidak sesuai dengan label di App Store Connect, Apple menolak build.

Dengan demikian, manifest adalah sumber kebenaran untuk sistem pemeriksaan Apple. Berdasarkan itu, label privasi dibuat secara otomatis, tetapi pengembang harus menjaga kedua representasi tetap mutakhir. Mengubah manifest setelah publikasi memerlukan pengiriman build baru untuk ditinjau.

Struktur PrivacyInfo.xcprivacy

File PrivacyInfo.xcprivacy menggunakan format property list dengan tipe akar Dictionary. Kunci utama tingkat atas: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).

Kunci tingkat atas

Kunci NSPrivacyTracking — nilai boolean yang menunjukkan apakah aplikasi menggunakan pelacakan (memerlukan ATT). Jika true, NSUserTrackingUsageDescription juga harus ditentukan di Info.plist. Kunci NSPrivacyTrackingDomains — array domain tempat pelacakan diterapkan.

Kunci NSPrivacyCollectedDataTypes — array kamus, yang masing-masing menjelaskan jenis data yang dikumpulkan: kategori (NSPrivacyCollectedDataType), kewajiban (NSPrivacyCollectedDataTypeLinked), tujuan (NSPrivacyCollectedDataTypePurposes). Tujuan meliputi: penandaan pihak ketiga, analitik, pengembangan produk, dan personalisasi konten.

Kunci NSPrivacyAccessedAPITypes — array kamus untuk setiap kategori Required Reason API: kategori (NSPrivacyAccessedAPITypeReasons) — alasan spesifik dari daftar yang disetujui Apple dan NSPrivacyAccessedAPIType — pengidentifikasi kategori 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>

Kategori data di NSPrivacyCollectedDataTypes

Tipe data dibagi menjadi beberapa kategori: informasi kontak (nama, email, telepon), keuangan (data pembayaran), pengidentifikasi (IDFA, User ID), data penggunaan (log, klik), diagnostik (crash logs) dan konten pengguna (foto, video, file). Setiap kategori tambahan ditandai sebagai „terkait dengan pengguna" (linked) atau „tidak terkait" (not linked).

Linked berarti data terkait dengan akun pengguna; not linked — data digabungkan atau dianonimkan. Dari penandaan ini tergantung bagaimana Apple menampilkan label privasi: data linked ditandai kuning, not linked — hijau.

API mana yang memerlukan pencantuman alasan

Apple telah mengidentifikasi beberapa kategori API, yang setiap penggunaannya harus disertai dengan alasan spesifik dari daftar yang disetujui. Alasan adalah kode unik, misalnya C617.1 atau 35F9.1, yang sesuai dengan tujuan spesifik yang diizinkan Apple.

Kategori utama Required Reason API

Kategori NSPrivacyAccessedAPICategoryFileTimestamp mencakup API untuk akses ke stempel waktu file (creationDate, modificationDate). Alasan: C617.1 (sinkronisasi file), 3B52.1 (cadangan), 0A2A.1 (anti-penipuan).

Kategori NSPrivacyAccessedAPICategoryDiskSpace mencakup API untuk memeriksa ruang kosong disk (NSFileManager. Pemeriksaan (NSFileManager). Alasan: E174.1 (manajemen cache), 85F4.1 (unduh konten), B728.1 (diagnostik).

Kategori NSPrivacyAccessedAPICategorySystemBootTime mencakup API akses ke waktu boot sistem (uptime). Hanya ada satu alasan: 35F9.1 (pengukuran waktu sesi untuk analitik). Penggunaan lainnya dianggap sebagai fingerprinting.

Daftar lengkap kategori API

  • FileTimestamp — akses ke stempel waktu file, diizinkan untuk sinkronisasi dan cadangan
  • DiskSpace — pemeriksaan ruang kosong, diizinkan untuk manajemen cache dan unduhan
  • SystemBootTime — waktu uptime, hanya diizinkan untuk analitik sesi
  • UserDefaults — akses ke UserDefaults aplikasi lain, sepenuhnya dilarang
  • ActiveKeyboards — daftar keyboard aktif, diizinkan untuk pengembang IME
  • SystemAperture — ukuran potongan layar, diizinkan untuk aplikasi foto dan AR

Setiap kategori memiliki 1 hingga 5 alasan yang disetujui. Pengembang wajib memilih alasan yang paling sesuai dengan penggunaan API yang sebenarnya. Memberikan alasan yang tidak benar dapat menyebabkan penolakan build atau pemblokiran akun.

Persyaratan untuk SDK pihak ketiga

Mulai 1 Mei 2024, semua SDK pihak ketiga — baik biner maupun sumber terbuka — wajib menyertakan Privacy Manifest dalam paket mereka. Apple memeriksa manifest untuk semua dependensi, dan jika setidaknya satu SDK tidak memiliki manifest, build akan ditolak.

SDK besar (Firebase, Adjust, AppsFlyer, Facebook SDK) sudah memperbarui paket mereka. Jika proyek Anda menggunakan SDK yang kurang dikenal, periksa versinya dan jika perlu perbarui atau hubungi pengembang. Solusi sementara — menambahkan manifest untuk SDK secara manual ke proyek, tetapi tidak disarankan karena ketidaksesuaian saat pembaruan.

Cara membuat Privacy Manifest di Xcode

Privacy Info.xcprivacy dapat dibuat melalui template bawaan Xcode 15+ atau secara manual. Mari kita bahas kedua opsi.

Membuat melalui Xcode 15

Di Xcode 15 telah ditambahkan template Privacy Manifest: File → New → File → Resource → Privacy Manifest. Xcode membuat file dengan struktur dasar dan mengisi NSPrivacyTracking serta array kosong untuk API dan data. Setelah dibuat, Anda perlu secara manual menentukan alasan untuk setiap Required Reason API yang digunakan.

Template secara otomatis menambahkan file ke target utama. Jika proyek memiliki beberapa target (Extensions, Watch app), manifest harus ditambahkan ke masing-masing. Xcode tidak memeriksa keberadaan manifest dalam dependensi pada tahap kompilasi — hanya pada tahap pengarsipan.

swift
// AppDelegate: memeriksa manifest pada tahap pengembangan
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")
}

Membuat secara manual melalui XML

Anda dapat membuat PrivacyInfo.xcprivacy secara manual sebagai file XML property list biasa. Untuk ini, buat file dengan nama PrivacyInfo.xcprivacy, tulis header plist standar dan tambahkan kamus akar dengan kunci yang diperlukan. Pastikan file telah ditambahkan ke target (Target Membership).

Cara manual berguna ketika Anda perlu menambahkan manifest ke pustaka statis atau dependensi Package Manager tanpa menggunakan antarmuka Xcode. Setelah kompilasi, periksa apakah file telah masuk ke biner melalui perintah nm atau pengarsipan.

Memeriksa manifest sebelum publikasi

Sebelum mengirim build ke App Store, Anda perlu memeriksa apakah Privacy Manifest benar dan lengkap. Apple menyediakan beberapa alat pemeriksaan.

Validator bawaan Xcode

Saat pengarsipan proyek (Product → Archive) Xcode melakukan pemeriksaan manifest. Jika ditemukan kesalahan — tidak ada manifest, alasan salah, kategori kosong — pengarsipan berakhir dengan kesalahan. Log kesalahan ditampilkan di Issue navigator dengan menunjukkan SDK bermasalah dan kategori API.

Pemeriksaan tambahan dilakukan oleh App Store Connect saat mengunggah build. Jika validasi gagal, build ditolak dengan email otomatis yang berisi pengidentifikasi API bermasalah dan perbaikan yang direkomendasikan.

Pemeriksaan melalui baris perintah

Untuk otomatisasi pemeriksaan, gunakan skrip yang menganalisis biner untuk penggunaan Required Reason API. Apple menyediakan alat libtool dan skrip pemeriksaan simbol, tetapi komunitas telah mengembangkan utilitas yang lebih nyaman.

bash
# Mencari penggunaan FileTimestamp API di biner
nm MyApp.app/MyApp | grep "NSFileCreationDate"

# Memeriksa keberadaan PrivacyInfo.xcprivacy di aplikasi
find MyApp.app -name "*.xcprivacy"

Kesalahan validasi umum

Kesalahan paling umum — tidak adanya manifest di salah satu SDK. Bahkan jika target utama berisi manifest, Apple memeriksa semua biner secara terpisah. Yang kedua paling umum — kode alasan yang salah: menggunakan alasan untuk satu kategori API dengan API dari kategori lain.

Kesalahan ketiga — deklarasi berlebihan API yang sebenarnya tidak digunakan. Pengembang menambahkan semua kemungkinan alasan "untuk jaga-jaga", yang mengkhawatirkan peninjau Apple. Tambahkan hanya kategori yang benar-benar digunakan. Gunakan penganalisis statis Xcode untuk pemeriksaan.

Pertanyaan yang Sering Diajukan

Apa yang terjadi jika tidak ada Privacy Manifest?

Mulai 1 Mei 2024, Apple menolak build apa pun tanpa manifest. Kesalahan terjadi pada tahap unggah ke App Store Connect. Aplikasi lama tidak diblokir, tetapi pembaruan memerlukan penyertaan wajib manifest.

Apakah Privacy Manifest diperlukan untuk aplikasi iPadOS?

Ya, manifest wajib untuk semua platform Apple: iOS, iPadOS, macOS, tvOS, watchOS dan visionOS. Persyaratan untuk Required Reason API seragam untuk semua platform, meskipun set API mungkin sedikit berbeda.

Bagaimana cara menambahkan manifest untuk SDK pihak ketiga?

Jika SDK tidak menyediakan manifest, buat file PrivacyInfo.xcprivacy terpisah dan tambahkan ke grup SDK di proyek. Tentukan alasan untuk API yang digunakan SDK ini berdasarkan dokumentasi SDK.

Bisakah Apple menolak build karena alasan yang salah?

Ya. Pada pemeriksaan otomatis, Apple membandingkan alasan yang dideklarasikan dengan panggilan API yang sebenarnya. Ketidaksesuaian menyebabkan penolakan. Pada pemeriksaan manual, peninjau dapat meminta penjelasan.

Apakah Privacy Manifest diperiksa untuk Swift Package Manager?

Ya, Apple memeriksa manifest untuk semua dependensi, termasuk SPM. Penyedia paket wajib menyertakan PrivacyInfo.xcprivacy di repositori mereka. Xcode memperingatkan tentang manifest yang hilang saat pengarsipan.

Ringkasan

  • Privacy Manifest — file wajib PrivacyInfo.xcprivacy untuk semua aplikasi dan SDK mulai 2024
  • Required Reason API — 6 kategori API yang memerlukan deklarasi alasan penggunaan spesifik
  • Alasan — kode unik (C617.1, 35F9.1), setiap kategori memiliki 1-5 alasan yang diizinkan
  • SDK — setiap SDK pihak ketiga harus menyertakan manifest sendiri di biner
  • Validasi — Xcode memeriksa manifest saat pengarsipan, App Store Connect saat unggah
  • Tenggat waktu — mulai 1 Mei 2024 semua build baru harus menyertakan manifest
  • Buat PrivacyInfo.xcprivacy melalui template Xcode dan deklarasikan hanya API yang benar-benar digunakan

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga