Privacy manifest Apple wajib untuk upload ke App Store: setiap aplikasi membutuhkan PrivacyInfo.xcprivacy yang menjelaskan pengumpulan data aplikasi Anda, domain tracking, dan API alasan yang diperlukan panggilan code Anda. SDK pihak ketiga di daftar wajib Apple harus menyertakan manifest mereka sendiri (dan tanda tangan jika didistribusikan sebagai biner). Panduan ini berfokus pada kepatuhan 2026 dan troubleshooting untuk Capacitor iOS apps: what to declare, how to fix ITMS-91053 dan ITMS-91061, dan cara memvalidasi sebelum submit.
Cakupan privacy manifest
Privacy manifest adalah property list yang dibundel dengan app atau SDK Anda. Xcode mengagregasi semua manifest saat archive menjadi satu laporan privasi.
| Key | Tujuan |
|---|---|
NSPrivacyTracking |
Apakah app atau SDK Anda menggunakan data untuk tracking sesuai definisi Apple |
NSPrivacyTrackingDomains |
Domain yang terlibat dalam tracking |
NSPrivacyCollectedDataTypes |
Jenis data yang dikumpulkan dan cara penggunaannya |
NSPrivacyAccessedAPITypes |
API reason wajib yang dimiliki code Anda gunakan, dengan kode reason yang disetujui |
Ringkasan Apple: Menambahkan privacy manifest ke aplikasi Anda atau SDK pihak ketiga.
Anda bertanggung jawab atas semua code dalam binary, termasuk SDK yang tertanam. Manifest Anda harus mendeskripsikan aplikasi Anda saja. Jangan menyalin praktik data SDK lain ke file Anda.
Kategori API alasan wajib
Sejak 1 Mei 2024, App Store Connect akan menolak upload jika aplikasi Anda menggunakan API yang terdaftar tanpa alasan yang disetujui di NSPrivacyAccessedAPITypes. Apple mendokumentasikan API dan alasan yang disetujui di Mendeskripsikan penggunaan API alasan wajib.
Menurut Apple, TN3183, kategori nilainya adalah:
NSPrivacyAccessedAPIType nilai |
Pemicu umum di aplikasi hybrid |
|---|---|
NSPrivacyAccessedAPICategoryUserDefaults |
Pengaturan, status plugin, persistensi kecil |
NSPrivacyAccessedAPICategoryFileTimestamp |
Metadata file, cache, bundle update |
NSPrivacyAccessedAPICategoryDiskSpace |
Pemeriksaan ruang kosong sebelum download |
NSPrivacyAccessedAPICategorySystemBootTime |
Waktu berlalu, timer, atau timestamp absolut |
NSPrivacyAccessedAPICategoryActiveKeyboards |
Ekstensi keyboard atau deteksi input |
Untuk setiap kategori yang Anda gunakan, tambahkan satu dictionary dengan NSPrivacyAccessedAPIType dan NSPrivacyAccessedAPITypeReasons. Pilih saja kode alasan yang diuraikan Apple untuk kategori tersebut. Kode yang salah menyebabkan kegagalan review.
Contoh fragmen (sesuaikan kategori dan kode dengan aplikasi Anda setelah memeriksa laporan privasi):
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
Capacitor sendiri tercantum di persyaratan SDK pihak ketiga daftar, sehingga framework ini menyertakan manifest untuk penggunaan API milik Capacitor sendiri. Anda tetap memerlukan manifest tingkat aplikasi untuk URL lapisan native dan JavaScript, plugin, serta API apa pun yang tidak tercakup oleh dependensi.
ITMS-91053: deklarasi API tidak ada
ITMS-91053 berarti App Store Connect mendeteksi alasan wajib API di build Anda tanpa entri yang cocok di privacy manifest yang digabungkan.
Perbaiki:
- Baca email penolakan atau log upload. Di sana disebutkan API kategori (contohnya
NSPrivacyAccessedAPICategoryDiskSpace). - Buka laporan privacy arsip di Xcode (Produk > Arsip, lalu Buat Laporan Privasi di arsip) dan lihat apakah kesalahannya ada di target aplikasi Anda atau dependensi.
- Jika API ada di URL code atau plugin yang Anda miliki, tambahkan kategori dan alasan yang disetujui ke
ios/App/PrivacyInfo.xcprivacy. - Jika API berasal dari dependensi, upgrade pod atau paket SPM ke versi yang menyertakan manifest, atau patch plugin dan deklarasikan hanya apa yang benar-benar dipanggil oleh fork Anda.
- Re-archive dan pastikan kategori muncul di laporan sebelum Anda upload lagi.
Jangan deklarasikan kategori yang tidak Anda gunakan. Analisis statis Apple terikat pada simbol dalam binary.
ITMS-91061: manifest privasi pihak ketiga hilang
ITMS-91061 berarti SDK yang berdampak pada privasi di app bundle Anda tidak memiliki PrivacyInfo.xcprivacy. Apple menyatakan bahwa ketika Anda merilis aplikasi baru atau pembaruan yang menambahkan sebuah SDK yang terdaftar, yang SDK harus menyertakan manifest; SDK biner juga memerlukan tanda tangan yang valid dari vendor SDK.
Perbaiki:
- Salin path framework dari email (contohnya
Frameworks/FirebaseCore.framework/FirebaseCore). - Identifikasi paket binary CocoaPods, SPM, atau vendored.
- Upgrade ke rilis vendor yang membundel
PrivacyInfo.xcprivacydi root framework. - Clean, rebuild, dan verifikasi file di dalam
.xcarchivesebelum upload.
Jangan pindahkan koleksi SDK atau deklarasi API ke dalam manifest aplikasi Anda. Apple secara eksplisit memperingatkan bahwa manifest aplikasi hanya boleh mendeskripsikan aplikasi tersebut. Jika SDK tidak lagi dikelola, ganti atau gunakan build vendor yang patuh.
SDK yang terdaftar mencakup stack mobile umum (Firebase, Flutter, Capacitor, shared_preferences_ios, dan lainnya). Cek daftar terbaru di situs Apple sebelum setiap rilis.
Manifest dan signature SDK pihak ketiga
Saat Anda memperbarui dependensi, Xcode memvalidasi bahwa framework binary ditandatangani oleh developer yang sama dengan rilis sebelumnya. Ini melindungi supply chain saat manifest berubah.
Workflow praktis:
- Setelah
pod installatau saat resolving SPM, cariios/untukPrivacyInfo.xcprivacytersebut. - Archive dan gunakan Buat Laporan Privasi untuk membaca gambaran keseluruhan.
- Bandingkan laporan dengan jawaban kuesioner privasi App Store Anda.
Untuk tooling live update, deklarasikan API alasan wajib yang benar-benar digunakan oleh updater Anda (misalnya ruang disk, timestamp file, atau preferensi pengguna). Akses jaringan bukan kategori alasan wajib API. Jika updater mengumpulkan data pribadi, ungkapkan data tersebut dalam label privasi App Store dan jawaban kuesioner Anda; mengambil update melalui HTTPS saja tidak menciptakan kategori pengungkapan baru. Pertahankan Kepatuhan Capgo live update perlu diingat saat mendokumentasikan perilaku OTA.
Tambah PrivacyInfo.xcprivacy pada proyek iOS Capacitor
- Sinkronkan proyek native:
bunx cap sync ios. - Buka workspace Xcode di
ios/App. - File > New > File, pilih Privasi Aplikasi (atau tambahkan
PrivacyInfo.xcprivacyplist kosong). - Simpan file di
ios/App(folder yang sama denganAppDelegatesudah oke). - Pada target Build Phases > Copy Bundle Resources, pastikan
PrivacyInfo.xcprivacysudah terdaftar. - Isi tracking, tipe data yang dikumpulkan, dan required reason API sesuai dengan app dan plugin Anda.
- Archive, buat laporan privasi, dan perbaiki kategori yang kurang sebelum upload ke App Store Connect.
Jika Anda mengedit plist sebagai XML di disk, buka kembali Xcode agar target membership tetap benar.
Setiap app atau target SDK memiliki PrivacyInfo.xcprivacymasing-masing. Saat Anda melakukan archive, Xcode menggabungkan manifest tersebut menjadi satu laporan privasi. Anda tidak perlu menggabungkan plist dependency ke file app secara manual.
Untuk plugin Capacitor kustom dipublish sebagai framework iOS terpisah, tambahkan PrivacyInfo.xcprivacy di bawah plugin tersebut ios/Plugin/ folder (atau setara) plugin tersebut dan daftarkan di target plugin Salin Sumber Bundle, bukan hanya di target aplikasi.
Saat NSPrivacyTracking adalah true atau Anda menyematkan SDK iklan atau analitik, selaraskan manifest dengan label privasi App Store dan tampilkan prompt App Tracking Transparency ketika iOS membutuhkannya. @capgo/capacitor-app-tracking-transparency menjelaskan alur ATT untuk aplikasi Capacitor.
Checklist validasi sebelum submit
- Target aplikasi mencakup
PrivacyInfo.xcprivacydi Salin Sumber Bundle. - Setiap kategori alasan wajib dalam penolakan atau laporan memiliki kode alasan yang disetujui.
- Setiap SDK pihak ketiga yang terdaftar dalam build menyertakan manifest-nya sendiri di path yang diharapkan.
- Laporan privasi sesuai dengan pemahaman Anda tentang SDK analitik, iklan, dan autentikasi.
- Label privasi App Store selaras dengan laporan gabungan.
FAQ
Apakah plugin Capacitor membutuhkan manifest privasi mereka sendiri?
Jika plugin didistribusikan sebagai source di repo Anda, penggunaan API-nya menjadi bagian dari binary aplikasi Anda. Deklarasikan API yang dipanggil plugin di app manifest, atau kontribusikan manifest di dalam target plugin jika plugin tersebut dikirim sebagai framework terpisah. Binary pods harus mengikuti aturan SDK pihak ketiga Apple.
Bisakah saya memperbaiki ITMS-91061 hanya dengan mengedit PrivacyInfo.xcprivacy aplikasi saya?
Tidak. SDK harus menyertakan manifest. File Anda hanya boleh mendokumentasikan praktik aplikasi Anda.
Di mana tanggal kebijakan Apple didokumentasikan?
API alasan wajib: diberlakukan sejak 1 Mei 2024. Aturan manifest dan tanda tangan pihak ketiga untuk SDK yang terdaftar dijelaskan di Persyaratan SDK pihak ketiga.
Lanjut dari Privacy Manifest for iOS Apps
Jika Anda menggunakan Privacy Manifest untuk Aplikasi iOS untuk merencanakan keamanan dan kepatuhan, hubungkan dengan Enkripsi untuk detail implementasi pada Encryption, Kepatuhan untuk detail implementasi pada Compliance, Capgo Pemindai Keamanan untuk alur kerja produk di Capgo Security Scanner, Keamanan Capgo untuk alur kerja produk di Capgo Security, dan Capgo Pusat Kepercayaan untuk workflow produk di Capgo Trust Center.