Bagaimanakah cara melaksanakan PrivacyInfo.xcprivacy untuk apl iOS? Pelaksanaan PrivacyInfo.xcprivacy memerlukan penambahan manifes privasi yang sah pada sasaran apl atau SDK anda, pengisytiharan kod alasan yang diluluskan untuk sebarang API Alasan Diperlukan yang digunakan (seperti User Defaults atau System Boot Time), serta pengesahan bahawa kebergantungan pihak ketiga memenuhi keperluan manifes privasi dan tandatangan yang terpakai pada bentuk pengedaran mereka.
Manifes Privasi (
PrivacyInfo.xcprivacy) ialah fail senarai hartanah piawai yang dibungkus dalam apl iOS dan SDK pihak ketiga yang mengisytiharkan kategori pengumpulan data, konfigurasi domain penjejakan, danjustifikasi yang diluluskan untuk mengakses API Alasan Diperlukan yang ditetapkan oleh Apple. Bermula 1 Mei 2024, apl yang dihantar ke App Store Connect mesti menyertakan alasan yang diluluskan untuk API Alasan Diperlukan yang digunakan oleh kod apl, termasuk kod SDK pihak ketiga yang berkenaan.
| Terma | Definisi |
|---|---|
| PrivacyInfo.xcprivacy | Format senarai hartanah piawai Apple untuk mengisytiharkan amalan privasi apl dan SDK. |
| Required Reason APIs | API platform khusus (seperti User Defaults atau Disk Space) yang memerlukan kod justifikasi eksplisit. |
| Resource Bundle Signing | Kelakuan penandatanganan kod sistem binaan yang dikenakan pada sasaran berkas sumber yang dijana, yang mungkin memerlukan penyelesaian masalah dalam sesetengah konfigurasi Xcode dan CocoaPods. |
| Privacy Report | Ringkasan PDF agregat yang dijana oleh Xcode 15+ yang menggabungkan pengisytiharan manifes privasi yang ditemui dalam apl yang diarkibkan dan SDK yang dipautkan. |
Memahami Keperluan Manifes Privasi Apple untuk SDK iOS
Seni Bina Manifes Privasi: Manifes Aplikasi Utama vs Manifes SDK Terbenam
Rangka kerja manifes privasi Apple mewujudkan model ketelusan modular merentas rantaian bekalan perisian iOS. Daripada meminta aplikasi hos mengaudit dan mengisytiharkan butiran pelaksanaan dalaman bagi setiap pustaka yang diimport secara manual, Apple membahagikan tadbir urus privasi kepada lapisan yang berbeza:
- Manifes Aplikasi Utama: Merangkumi pengumpulan data pihak pertama, domain penjejakan peringkat apl, dan API Alasan Diperlukan yang dipanggil secara langsung oleh kod sasaran aplikasi utama.
- Manifes SDK Terbenam: Pengisytiharan API Alasan Diperlukan mesti dimiliki oleh kod apl atau SDK pihak ketiga yang menggunakan API tersebut. Untuk fail boleh laku dan pustaka dinamik, berkas yang mengandungi fail boleh laku atau pustaka tersebut mesti menyertakan manifes privasi yang berkaitan; SDK pihak ketiga tidak boleh bergantung pada manifes apl hos untuk melaporkan penggunaan API Alasan Diperlukan SDK itu.
- Agregasi Kebergantungan Automatik: Apabila aplikasi diarkibkan dalam Xcode 15 atau lebih baharu, sistem binaan merentasi graf kebergantungan, menemui semua fail
PrivacyInfo.xcprivacyyang dibungkus, dan menggabungkannya ke dalam satu Laporan Privasi yang bersatu.

Empat Kekunci Konfigurasi Akar
Setiap fail PrivacyInfo.xcprivacy berstruktur sebagai kamus senarai hartanah XML yang mengandungi sehingga empat kekunci peringkat akar:
NSPrivacyTracking(Boolean): Mengisytiharkan sama ada aplikasi atau SDK menggunakan data yang dikumpul daripada apl untuk penjejakan di bawah definisi Telus Penjejakan Apl (ATT) Apple.NSPrivacyTrackingDomains(Susunan Rentetan): Senarai domain internet yang disambungkan oleh apl atau SDK yang terlibat dalam penjejakan. Jika pengguna tidak memberikan kebenaran ATT, iOS menyekat sambungan rangkaian ke domain yang diisytiharkan dalam susunan ini. Jika apl atau SDK tidak menyambung ke domain penjejakan, kekunci ini boleh ditinggalkan.NSPrivacyCollectedDataTypes(Susunan Kamus): Melaporkan kategori data yang ditentukan Apple yang dikumpul oleh apl atau SDK tentang orang yang menggunakan apl tersebut, berserta sama ada data itu dipautkan kepada identiti pengguna, sama ada ia digunakan untuk penjejakan, dan tujuan operasi pengumpulannya.NSPrivacyAccessedAPITypes(Susunan Kamus): Mengisytiharkan API Alasan Diperlukan yang ditetapkan oleh Apple yang dipanggil oleh binari, disertai dengan kod alasan rentetan yang diluluskan.

Penguatkuasaan Ingesti App Store Connect dan Diagnostik Ralat
App Store Connect menguatkuasakan manifes privasi semasa ingesti binari:
- Isytihar API Hilang (
ITMS-91053): Dicetuskan apabila binari yang disusun atau pustaka yang dipautkan memanggil simbol API Alasan Diperlukan, tetapi kekunci kategori yang sepadan tiada daripadaNSPrivacyAccessedAPITypes. - Pengisytiharan Kod Alasan Tidak Sah: Berlaku apabila manifes mengisytiharkan rentetan alasan yang tidak diluluskan, berformat salah, atau telah ditamatkan untuk kategori API tertentu.
- Manifes SDK Pihak Ketiga Diperlukan Tiada: Dikuatkuasakan dalam senario penyerahan yang ditentukan oleh keperluan SDK pihak ketiga semasa Apple untuk SDK tersenarai, memerlukan kedua-dua manifes privasi dan tandatangan digital yang sah untuk pengedaran binari.
Pembangun yang menyepadukan atribusi pelanggan dan pautan mendalam boleh merujuk kepada dokumentasi integrasi SDK iOS untuk spesifikasi teknikal mengenai pengisytiharan manifes.
Lihat Juga: SDK iOS ──> Seni Bina Atribusi Mudah Alih
Kategori API Alasan Diperlukan dan Kod Alasan yang Diluluskan
Lima Kategori API Alasan Diperlukan
Menurut Nota Teknikal Pembangun Apple TN3183, Apple mentakrifkan lima kategori API khusus yang memerlukan kod justifikasi eksplisit dalam NSPrivacyAccessedAPITypes. SDK mudah alih dan aplikasi iOS lazimnya berinteraksi dengan empat kategori utama:
NSPrivacyAccessedAPICategoryUserDefaults: Mengakses tetapan apl tempatan melaluiUserDefaultsatauNSUserDefaults.NSPrivacyAccessedAPICategorySystemBootTime: Mengukur masa yang berlalu atau tanda masa menggunakan API but sistem sepertisysctl(KERN_BOOTTIME)atausystemUptime.NSPrivacyAccessedAPICategoryDiskSpace: Memeriksa kapasiti sistem fail melaluistatfs,statvfs, atauvolumeAvailableCapacityKey.NSPrivacyAccessedAPICategoryFileTimestamp: Memeriksa tarikh penciptaan atau pengubahsuaian fail melaluistat,getattrlist, ataucontentModificationDateKey.NSPrivacyAccessedAPICategoryActiveKeyboards: Memeriksa sambungan papan kekunci tersuai yang aktif (terutamanya digunakan oleh utiliti papan kekunci khusus).
Pemetaan Kod Alasan Diluluskan Terpilih untuk Kes Penggunaan SDK Biasa
Jadual di bawah menumpukan pada kategori yang biasa ditemui dalam SDK mudah alih tujuan am; rujuk dokumentasi semasa Apple untuk senarai alasan lengkap, termasuk Papan Kekunci Aktif. Untuk mematuhi garis panduan Apple, pembangun mesti memilih kod alasan yang sepadan dengan tepat dengan penggunaan data masa tayangan sebenar mereka:
| Kekunci Kategori API | Kod Diluluskan | Tujuan Rasmi Selaras Apple |
|---|---|---|
NSPrivacyAccessedAPICategoryUserDefaults |
CA92.1 |
Membaca dan menulis data yang boleh diakses hanya oleh apl itu sendiri |
NSPrivacyAccessedAPICategoryUserDefaults |
1C8F.1 |
Membaca dan menulis data yang dikongsi hanya di dalam Kumpulan Apl yang sama |
NSPrivacyAccessedAPICategoryUserDefaults |
C56D.1 |
Pembalut SDK pihak ketiga yang menyediakan fungsi nilai kunci kepada apl hos |
NSPrivacyAccessedAPICategorySystemBootTime |
35F9.1 |
Mengukur masa yang berlalu antara peristiwa yang berlaku dalam apl atau mengendalikan pemasa |
NSPrivacyAccessedAPICategorySystemBootTime |
8FFB.1 |
Mengira tanda masa mutlak untuk peristiwa yang berlaku dalam apl |
NSPrivacyAccessedAPICategoryDiskSpace |
E174.1 |
Memeriksa ruang cakera sebelum menulis fail dan mengubah suai kelakuan apl jika ruang rendah |
NSPrivacyAccessedAPICategoryDiskSpace |
85F4.1 |
Mengakses maklumat ruang cakera untuk memaparkan kapasiti yang tersedia kepada pengguna |
NSPrivacyAccessedAPICategoryFileTimestamp |
C617.1 |
Mengakses metadata fail di dalam kontena apl, Kumpulan Apl, atau kontena CloudKit |
NSPrivacyAccessedAPICategoryFileTimestamp |
3B52.1 |
Mengakses metadata untuk fail atau direktori yang dipilih secara eksplisit oleh pengguna |
NSPrivacyAccessedAPICategoryFileTimestamp |
0A2A.1 |
Pembalut SDK pihak ketiga yang mengakses tanda masa fail semata-mata bagi pihak apl hos |

Membina Contoh Senarai Hartanah PrivacyInfo.xcprivacy
Mengkonfigurasi Jenis Pengumpulan Data
Susunan NSPrivacyCollectedDataTypes melaporkan kategori data yang ditentukan Apple yang dikumpul oleh apl atau SDK tentang orang yang menggunakan apl tersebut, berserta sama ada data itu dipautkan kepada identiti pengguna, sama ada ia digunakan untuk penjejakan, dan tujuan operasi pengumpulannya:
NSPrivacyCollectedDataType: Pengecam rentetan standard Apple (cth.,NSPrivacyCollectedDataTypeDeviceID).NSPrivacyCollectedDataTypeLinked: Boolean yang menunjukkan sama ada data dipautkan kepada identiti pengguna individu.NSPrivacyCollectedDataTypeTracking: Boolean yang menunjukkan sama ada data digunakan untuk penjejakan merentas apl.NSPrivacyCollectedDataTypePurposes: Susunan rentetan tujuan standard (cth.,NSPrivacyCollectedDataTypePurposeAnalytics).
Mengisytiharkan Domain Penjejakan
Jika SDK atau aplikasi terlibat dalam penjejakan di bawah definisi ATT, semua domain penjejakan yang sepadan mesti diisytiharkan di bawah NSPrivacyTrackingDomains. Jika kebenaran penjejakan tidak diberikan oleh pengguna, iOS menyekat sambungan rangkaian ke domain yang diisytiharkan. Jika apl atau SDK tidak terlibat dalam penjejakan, NSPrivacyTracking harus ditetapkan kepada false dan NSPrivacyTrackingDomains boleh ditinggalkan.
Konfigurasi senarai hartanah di bawah menggambarkan contoh skema PrivacyInfo.xcprivacy. Sertakan hanya kategori dan alasan yang mencerminkan pelaksanaan sebenar aplikasi anda:
```xml
<?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>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeDeviceID</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>
Menyelesaikan Ralat Penandatanganan Kod Berkas Sumber CocoaPods
Punca Utama: Kegagalan Penandatanganan Berkas Sumber dalam Xcode 15 dan 16
Apabila menyepadukan kebergantungan melalui CocoaPods dalam Xcode 15 atau 16, pembangun kerap menghadapi penghentian penyusunan:
Signing for "libOpoInstallSDK-OPPrivacy" requires a development team. Select a development team in the Signing & Capabilities editor.
Kegagalan binaan ini adalah isu integrasi Xcode dan CocoaPods:
- Pustaka statik
.atradisional tidak boleh mengandungi sumber sepertiPrivacyInfo.xcprivacysecara langsung. Apple mengesyorkan pembungkusan kod SDK statik dan sumber bersama-sama di dalam rangka kerja statik. - Sesetengah integrasi CocoaPods sebaliknya menjana sasaran berkas sumber yang berasingan untuk mengedarkan sumber bersama-sama pustaka statik.
- Sasaran berkas sumber yang dijana oleh CocoaPods tertentu boleh mewarisi konfigurasi penandatanganan yang menyebabkan binaan Xcode berhenti dan meminta pasukan pembangunan. Ini adalah isu integrasi sistem binaan dan bukannya keperluan skema
PrivacyInfo.xcprivacy.
Melaksanakan Penyelesaian Sistem Binaan Sasaran dalam Podfile
Untuk menyelesaikan ralat ini merentas binaan automatik, pembangun boleh menggunakan cangkuk post_install skop dalam Podfile projek mereka. Oleh kerana ini ialah penyelesaian sistem binaan untuk berkas sumber bukan boleh laku, pasukan harus mengehadkan skopnya kepada sasaran berkas terjejas tertentu atau mengesahkan kebergantungan terjejas sebelum mengenakan perubahan secara global.
Skrip Ruby di bawah menunjukkan cara lelaran melalui sasaran CocoaPods dan menyahaktifkan penandatanganan pada sasaran berkas sumber yang ditetapkan:
post_install do |installer|
# Specify non-executable resource bundle targets that encounter signing errors without a development team
target_bundle_names = [
'libOpoInstallSDK-OPPrivacy'
]
installer.pods_project.targets.each do |target|
if target.respond_to?(:product_type) &&
target.product_type == "com.apple.product-type.bundle" &&
target_bundle_names.include?(target.name)
target.build_configurations.each do |config|
# Strip code signing requirement from designated non-executable resource bundles
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
config.build_settings['CODE_SIGN_IDENTITY'] = ''
end
end
end
end
Mengaudit dan Menjana Laporan Privasi Agregat dalam Xcode
Menjana Laporan Privasi Bersatu melalui Pengelola Arkib Xcode
Untuk mengesahkan bahawa semua sasaran pihak pertama dan kebergantungan pihak ketiga diisytiharkan dengan betul sebelum menyerahkan binari:
- Buka projek anda dalam Xcode 15 atau lebih baharu.
- Pilih Product > Archive untuk mencipta arkib keluaran.
- Dalam Pengelola Xcode, klik kanan (atau Ctrl-klik) arkib dan pilih Generate Privacy Report.
- Simpan dan periksa laporan PDF yang dijana untuk mengesahkan bahawa semua API Alasan Diperlukan, kategori data, dan manifes SDK pihak ketiga dipaparkan dengan tepat.
Analisis Statik Baris Perintah: Imbasan Heuristik Pra-Penyerahan
Pasukan pembangunan boleh melaksanakan audit pra-penyerahan heuristik di dalam saluran paip integrasi berterusan (CI/CD) dengan mengimbas binari yang disusun untuk simbol terhad menggunakan nm dan otool:
# Scan unpacked application binary for candidate Required Reason API symbols
nm -u /path/to/Payload/YourApp.app/YourApp | grep -E 'sysctl|statfs|statvfs|getattrlist|NSUserDefaults'
# Check embedded frameworks and bundles for PrivacyInfo.xcprivacy manifests
find /path/to/Payload/YourApp.app -name "PrivacyInfo.xcprivacy"
Kehadiran simbol sahaja tidak menetapkan alasan diluluskan yang mana terpakai; semak laluan panggilan sebenar dan kes penggunaan sebelum mengubah suai manifes. Pasukan mesti menggunakan Generate Privacy Report Xcode dan pra-pemeriksaan App Store Connect untuk pengesahan berwibawa.

Matrik Diagnostik: Punca Utama Penolakan Manifes Privasi App Store
| Mod Kegagalan / Kod Ralat | Punca Utama Asas | Kelakuan Sistem Diperhatikan | Pemulihan Disyorkan |
|---|---|---|---|
Isytihar API Hilang (ITMS-91053) |
Binari memanggil API terhad tetapi manifes meninggalkan kategori | Amaran atau penolakan muat naik App Store Connect | Isytiharkan kategori API yang sepadan dan kod alasan yang sah |
| Kod Alasan Tidak Sah | Kod alasan yang ditentukan tidak diluluskan oleh Apple untuk kategori tersebut | App Store Connect menolak penyerahan | Kemas kini XML untuk menggunakan rentetan alasan yang diluluskan daripada spesifikasi Apple |
| Manifes SDK Pihak Ketiga Hilang | Kebergantungan SDK pihak ketiga tersenarai tidak mempunyai manifes terbenam | App Store Connect menandakan manifes SDK yang hilang | Naik taraf kebergantungan kepada versi yang menyediakan PrivacyInfo.xcprivacy |
| Ralat Penandatanganan Kod Berkas Sumber | CocoaPods menjana sasaran berkas sumber tanpa pasukan penandatanganan | Penyusunan Xcode berhenti semasa binaan | Nilai sasaran berkas yang gagal dan gunakan penyelesaian penandatanganan Podfile berskop |
| Titik Akhir Penjejakan Tidak Diisytiharkan | Apl menyambung ke pelayan penjejakan yang tidak disenaraikan dalam NSPrivacyTrackingDomains |
Konfigurasi privasi tidak lengkap untuk kelakuan penjejakan apl | Senaraikan semua titik akhir penjejakan di bawah NSPrivacyTrackingDomains |
Soalan Lazim (FAQ)
Adakah setiap SDK pihak ketiga memerlukan fail PrivacyInfo.xcprivacy sendiri?
Apakah yang berlaku jika apl menggunakan UserDefaults tanpa mengisytiharkan alasan yang diluluskan?
Bolehkah aplikasi mengisytiharkan berbilang alasan untuk satu kategori API?
Ringkasan dan Rangka Kerja Keputusan
Rangka kerja Manifes Privasi Apple menguatkuasakan ketelusan merentas rantaian bekalan perisian iOS. Memastikan penyerahan App Store yang lancar memerlukan pasukan pembangunan mengaudit kod pihak pertama untuk penggunaan API Alasan Diperlukan, mengesahkan bahawa kebergantungan SDK pihak ketiga memenuhi keperluan manifes privasi yang terpakai pada penggunaan API mereka, dan mengurus penandatanganan berkas sumber CocoaPods dengan sewajarnya.
Untuk pengisytiharan manifes privasi khusus produk, semak dokumentasi OpoInstall dan bandingkan manifes yang dihantar dengan integrasi sebenar aplikasi serta keperluan semasa Apple.
Bahan Berkaitan
-
Konsep: Manifes Privasi, API Alasan Diperlukan, Penandatanganan Kod Berkas Sumber, Laporan Privasi, Pematuhan App Store
-
Teknologi: Xcode 15+, Pengurus Kebergantungan CocoaPods, Pengurus Pakej Swift, SDK iOS OpoInstall
-
Piawaian: Spesifikasi Manifes Privasi Apple, Garis Panduan Semakan App Store Seksyen 5.1.1
-
API & Konfigurasi:
PrivacyInfo.xcprivacy,NSPrivacyAccessedAPITypes, Cangkuk `post_install` Podfile
Dokumentasi Rasmi
Share this article



