Privacy Manifest — τι είναι, αρχείο PrivacyInfo.xcprivacy και απαιτήσεις

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-20 Χρόνος ανάγνωσης: 9 λεπ

Privacy Manifest (PrivacyInfo.xcprivacy) — το αρχείο που όλες οι εφαρμογές και τα SDK τρίτων υποχρεούνται να συμπεριλαμβάνουν στην έκδοση iOS από την άνοιξη του 2024. Η Apple απαιτεί τη δήλωση των λόγων χρήσης προστατευμένων API (Required Reason API) και των τύπων συλλεγόμενων δεδομένων. Σύμφωνα με την Apple Developer Documentation, κάθε δυαδικό στη σύνθεση της εφαρμογής — κύριος στόχος, πλαίσια, εξαρτήσεις Swift Package Manager — πρέπει να περιέχει το δικό του Privacy Manifest.

Κύρια σημεία

  • Privacy Manifest — αρχείο XML PrivacyInfo.xcprivacy με δήλωση λόγων χρήσης API
  • Required Reason API — κατηγορίες API που απαιτούν υποχρεωτική αναφορά λόγου
  • SDK Privacy Manifest — κάθε SDK τρίτου οφείλει να παρέχει το δικό του manifest
  • Λόγοι (Reasons) — συγκεκριμένος σκοπός χρήσης API από την εγκεκριμένη λίστα της Apple
  • Προθεσμία — από 1 Μαΐου 2024 όλες οι νέες εκδόσεις πρέπει να περιλαμβάνουν Privacy Manifest

Τι είναι το Privacy Manifest;

Το Privacy Manifest είναι το αρχείο PrivacyInfo.xcprivacy σε μορφή property list (XML), το οποίο δηλώνει ποιους τύπους δεδομένων συλλέγει η εφαρμογή και γιατί χρησιμοποιεί συγκεκριμένα API. Η Apple εισήγαγε τα manifest στο πλαίσιο της πρωτοβουλίας για αύξηση της διαφάνειας απορρήτου, παρόμοια με το Privacy Nutrition Label, αλλά σε επίπεδο κώδικα και δυαδικού.

Ο κύριος σκοπός του manifest είναι η τεκμηρίωση της χρήσης των λεγόμενων Required Reason API. Αυτές είναι κατηγορίες API που μπορούν να χρησιμοποιηθούν για λήψη ψηφιακού αποτυπώματος της συσκευής (fingerprinting), επομένως κάθε χρήση τους πρέπει να συνοδεύεται από δήλωση συγκεκριμένου λόγου από την εγκεκριμένη λίστα της Apple.

Από 1 Μαΐου 2024, η Apple απορρίπτει εκδόσεις που δεν περιέχουν Privacy Manifest. Αυτό ισχύει τόσο για τους κύριους στόχους της εφαρμογής όσο και για όλα τα ενσωματωμένα SDK και εξαρτήσεις. Σύμφωνα με το WWDC 2023, το manifest είναι υποχρεωτικό για όλες τις εφαρμογές που διανέμονται μέσω του App Store.

Το manifest πρέπει να υπάρχει σε κάθε δυαδικό — όχι μόνο στην κύρια εφαρμογή, αλλά και σε κάθε πλαίσιο και στατική βιβλιοθήκη. Εάν ένα SDK τρίτου δεν παρέχει manifest, ο προγραμματιστής πρέπει να το προσθέσει χειροκίνητα ή να επικοινωνήσει με τον πάροχο SDK για ενημέρωση.

Γιατί η Apple εισήγαγε το Privacy Manifest

Πριν από την εμφάνιση των manifest, οι προγραμματιστές μπορούσαν να χρησιμοποιούν εκτεταμένα συστημικά API (πρόσβαση στο σύστημα αρχείων, ημερομηνία/ώρα, αρχεία καταγραφής συστήματος) χωρίς διαφανή εξήγηση του σκοπού χρήσης. Αυτό δημιουργούσε κίνδυνο διαρροής δεδομένων μέσω SDK τρίτων που μπορούσαν να συλλέγουν πληροφορίες εν αγνοία του προγραμματιστή.

Σύμφωνα με δεδομένα της Mysk Inc. (2023), πολλά δημοφιλή SDK χρησιμοποιούσαν API για λήψη αποτυπώματος συσκευής χωρίς προφανή ανάγκη — για παράδειγμα, διάβαζαν τον χρόνο uptime για τον προσδιορισμό ζώνης ώρας ή σάρωναν καταλόγους για συλλογή μεταδεδομένων. Το Privacy Manifest υποχρεώνει σε δήλωση κάθε τέτοιας ενέργειας.

Εκτός από τα Required Reason API, το manifest περιλαμβάνει την ενότητα NSPrivacyTracking — μια σημαία που υποδεικνύει εάν η εφαρμογή χρησιμοποιεί παρακολούθηση (απαιτεί ATT) και NSPrivacyCollectedDataTypes — λίστα τύπων συλλεγόμενων δεδομένων σε μορφή Privacy Nutrition Label.

Διαφορά μεταξύ Privacy Manifest και Privacy Nutrition Label

Το Privacy Nutrition Label είναι μια φιλική προς τον χρήστη προβολή στη σελίδα της εφαρμογής στο App Store, που δείχνει ποια δεδομένα συλλέγει η εφαρμογή. Το Privacy Manifest είναι ένα τεχνικό αρχείο μέσα στο δυαδικό που ελέγχεται αυτόματα από την Apple. Εάν τα δεδομένα στο manifest δεν συμπίπτουν με τις ετικέτες στο App Store Connect, η Apple απορρίπτει την έκδοση.

Έτσι, το manifest είναι η πηγή αλήθειας για το σύστημα ελέγχου της Apple. Βάσει αυτού δημιουργούνται αυτόματα οι ετικέτες απορρήτου, αλλά ο προγραμματιστής πρέπει να διατηρεί και τις δύο αναπαραστάσεις ενημερωμένες. Η αλλαγή του manifest μετά τη δημοσίευση απαιτεί αποστολή νέας έκδοσης για έλεγχο.

Δομή του PrivacyInfo.xcprivacy

Το αρχείο PrivacyInfo.xcprivacy χρησιμοποιεί τη μορφή property list με ριζικό τύπο Dictionary. Τα κύρια κλειδιά ανώτατου επιπέδου: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).

Κλειδιά ανώτατου επιπέδου

Το κλειδί NSPrivacyTracking — λογική τιμή που υποδεικνύει εάν η εφαρμογή χρησιμοποιεί παρακολούθηση (απαιτεί ATT). Εάν true, πρέπει επίσης να καθοριστεί το NSUserTrackingUsageDescription στο Info.plist. Το κλειδί NSPrivacyTrackingDomains — πίνακας τομέων στους οποίους εφαρμόζεται παρακολούθηση.

Το κλειδί NSPrivacyCollectedDataTypes — πίνακας λεξικών, κάθε ένα από τα οποία περιγράφει τον τύπο συλλεγόμενων δεδομένων: κατηγορία (NSPrivacyCollectedDataType), υποχρεωτικότητα (NSPrivacyCollectedDataTypeLinked), σκοπός (NSPrivacyCollectedDataTypePurposes). Οι σκοποί περιλαμβάνουν: σήμανση τρίτων, αναλυτικά στοιχεία, ανάπτυξη προϊόντος και εξατομίκευση περιεχομένου.

Το κλειδί NSPrivacyAccessedAPITypes — πίνακας λεξικών για κάθε κατηγορία Required Reason API: κατηγορία (NSPrivacyAccessedAPITypeReasons) — συγκεκριμένος λόγος από την εγκεκριμένη λίστα της Apple και NSPrivacyAccessedAPIType — αναγνωριστικό κατηγορίας 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>

Κατηγορίες δεδομένων στο NSPrivacyCollectedDataTypes

Οι τύποι δεδομένων χωρίζονται σε διάφορες κατηγορίες: στοιχεία επικοινωνίας (όνομα, email, τηλέφωνο), οικονομικά (δεδομένα πληρωμής), αναγνωριστικά (IDFA, User ID), δεδομένα χρήσης (αρχεία καταγραφής, κλικ), διαγνωστικά (crash logs) και περιεχόμενο χρήστη (φωτογραφίες, βίντεο, αρχεία). Κάθε κατηγορία επιπλέον σημειώνεται ως «συνδεδεμένη με τον χρήστη" (linked) ή «μη συνδεδεμένη" (not linked).

Linked σημαίνει ότι τα δεδομένα συνδέονται με τον λογαριασμό του χρήστη· not linked — τα δεδομένα είναι συγκεντρωτικά ή ανωνυμοποιημένα. Από αυτή τη σήμανση εξαρτάται πώς η Apple εμφανίζει την ετικέτα απορρήτου: τα linked δεδομένα σημειώνονται με κίτρινο, τα not linked — με πράσινο.

Ποια API απαιτούν αναφορά λόγου

Η Apple έχει διακρίνει αρκετές κατηγορίες API, κάθε χρήση των οποίων πρέπει να συνοδεύεται από συγκεκριμένο λόγο από την εγκεκριμένη λίστα. Ο λόγος είναι ένα μοναδικός κωδικός, για παράδειγμα C617.1 ή 35F9.1, που αντιστοιχεί σε συγκεκριμένο σκοπό εγκεκριμένο από την Apple.

Κύριες κατηγορίες Required Reason API

Η κατηγορία NSPrivacyAccessedAPICategoryFileTimestamp περιλαμβάνει API για πρόσβαση σε χρονικές σφραγίδες αρχείων (creationDate, modificationDate). Λόγοι: C617.1 (συγχρονισμός αρχείων), 3B52.1 (δημιουργία αντιγράφων ασφαλείας), 0A2A.1 (αντι-απάτη).

Η κατηγορία NSPrivacyAccessedAPICategoryDiskSpace περιλαμβάνει API για έλεγχο ελεύθερου χώρου στο δίσκο (NSFileManager. Έλεγχοι (NSFileManager). Λόγοι: E174.1 (διαχείριση προσωρινής μνήμης), 85F4.1 (λήψη περιεχομένου), B728.1 (διαγνωστικά).

Η κατηγορία NSPrivacyAccessedAPICategorySystemBootTime περιλαμβάνει API πρόσβασης στον χρόνο εκκίνησης συστήματος (uptime). Υπάρχει μόνο ένας λόγος: 35F9.1 (μέτρηση χρόνου συνεδρίας για αναλυτικά στοιχεία). Οποιαδήποτε άλλη χρήση θεωρείται fingerprinting.

Πλήρης λίστα κατηγοριών API

  • FileTimestamp — πρόσβαση σε χρονικές σφραγίδες αρχείων, επιτρέπεται για συγχρονισμό και αντίγραφα ασφαλείας
  • DiskSpace — έλεγχος ελεύθερου χώρου, επιτρέπεται για διαχείριση προσωρινής μνήμης και λήψεις
  • SystemBootTime — χρόνος uptime, επιτρέπεται μόνο για αναλυτικά στοιχεία συνεδρίας
  • UserDefaults — πρόσβαση σε UserDefaults άλλων εφαρμογών, εντελώς απαγορευμένη
  • ActiveKeyboards — λίστα ενεργών πληκτρολογίων, επιτρέπεται για προγραμματιστές IME
  • SystemAperture — μέγεθος εγκοπής οθόνης, επιτρέπεται για εφαρμογές φωτογραφίας και AR

Κάθε κατηγορία έχει 1 έως 5 εγκεκριμένους λόγους. Ο προγραμματιστής υποχρεούται να επιλέξει τον λόγο που αντιστοιχεί ακριβέστερα στην πραγματική χρήση του API. Η παροχή ψευδούς λόγου μπορεί να οδηγήσει σε απόρριψη της έκδοσης ή αποκλεισμό του λογαριασμού.

Απαιτήσεις για SDK τρίτων

Από 1 Μαΐου 2024, όλα τα SDK τρίτων — τόσο δυαδικά όσο και ανοιχτού κώδικα — υποχρεούνται να συμπεριλαμβάνουν το Privacy Manifest στο πακέτο τους. Η Apple ελέγχει τα manifest για όλες τις εξαρτήσεις, και εάν τουλάχιστον ένα SDK δεν έχει manifest, η έκδοση θα απορριφθεί.

Μεγάλα SDK (Firebase, Adjust, AppsFlyer, Facebook SDK) έχουν ήδη ενημερώσει τα πακέτα τους. Εάν το έργο σας χρησιμοποιεί ένα λιγότερο γνωστό SDK, ελέγξτε την έκδοσή του και εάν χρειάζεται ενημερώστε το ή επικοινωνήστε με τον προγραμματιστή. Προσωρινή λύση — μη αυτόματη προσθήκη manifest για το SDK στο έργο, αλλά δεν συνιστάται λόγω αποκλίσεων κατά τις ενημερώσεις.

Πώς να δημιουργήσετε Privacy Manifest στο Xcode

Το Privacy Info.xcprivacy μπορεί να δημιουργηθεί μέσω του ενσωματωμένου προτύπου Xcode 15+ ή χειροκίνητα. Θα εξετάσουμε και τις δύο επιλογές.

Δημιουργία μέσω Xcode 15

Στο Xcode 15 προστέθηκε το πρότυπο Privacy Manifest: File → New → File → Resource → Privacy Manifest. Το Xcode δημιουργεί ένα αρχείο με βασική δομή και συμπληρώνει το NSPrivacyTracking και κενούς πίνακες για API και δεδομένα. Μετά τη δημιουργία, πρέπει να καθορίσετε χειροκίνητα τους λόγους για κάθε χρησιμοποιούμενο Required Reason API.

Το πρότυπο προσθέτει αυτόματα το αρχείο στον κύριο στόχο. Εάν το έργο έχει πολλούς στόχους (Extensions, Watch app), το manifest πρέπει να προστεθεί σε κάθε ένα. Το Xcode δεν ελέγχει την παρουσία manifest στις εξαρτήσεις κατά το στάδιο μεταγλώττισης — μόνο κατά το στάδιο αρχειοθέτησης.

swift
// AppDelegate: έλεγχος manifest στο στάδιο ανάπτυξης
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")
}

Χειροκίνητη δημιουργία μέσω XML

Μπορείτε να δημιουργήσετε το PrivacyInfo.xcprivacy χειροκίνητα ως ένα συνηθισμένο αρχείο XML property list. Για αυτό, δημιουργήστε ένα αρχείο με όνομα PrivacyInfo.xcprivacy, γράψτε την τυπική κεφαλίδα plist και προσθέστε ένα ριζικό λεξικό με τα απαραίτητα κλειδιά. Βεβαιωθείτε ότι το αρχείο έχει προστεθεί στον στόχο (Target Membership).

Η χειροκίνητη μέθοδος είναι χρήσιμη όταν χρειάζεται να προσθέσετε manifest σε μια στατική βιβλιοθήκη ή εξάρτηση Package Manager χωρίς τη χρήση του περιβάλλοντος Xcode. Μετά τη μεταγλώττιση, ελέγξτε εάν το αρχείο έχει εισαχθεί στο δυαδικό μέσω της εντολής nm ή αρχειοθέτησης.

Έλεγχος manifest πριν από τη δημοσίευση

Πριν στείλετε την έκδοση στο App Store, πρέπει να ελέγξετε ότι το Privacy Manifest είναι σωστό και πλήρες. Η Apple παρέχει διάφορα εργαλεία ελέγχου.

Ενσωματωμένος επικυρωτής Xcode

Κατά την αρχειοθέτηση του έργου (Product → Archive) το Xcode εκτελεί έλεγχο των manifest. Εάν εντοπιστεί σφάλμα — έλλειψη manifest, λανθασμένος λόγος, κενή κατηγορία — η αρχειοθέτηση ολοκληρώνεται με σφάλμα. Το αρχείο σφαλμάτων εμφανίζεται στο Issue navigator με ένδειξη του προβληματικού SDK και κατηγορίας API.

Πρόσθετος έλεγχος εκτελείται από το App Store Connect κατά τη μεταφόρτωση της έκδοσης. Εάν η επικύρωση αποτύχει, η έκδοση απορρίπτεται με αυτόματο email που περιέχει το αναγνωριστικό του προβληματικού API και τη συνιστώμενη διόρθωση.

Έλεγχος μέσω γραμμής εντολών

Για αυτοματοποίηση του ελέγχου, χρησιμοποιήστε σενάρια που αναλύουν το δυαδικό για χρήση Required Reason API. Η Apple παρέχει το εργαλείο libtool και σενάρια ελέγχου συμβόλων, αλλά η κοινότητα έχει αναπτύξει πιο βολικά βοηθήματα.

bash
# Αναζήτηση χρήσης FileTimestamp API στο δυαδικό
nm MyApp.app/MyApp | grep "NSFileCreationDate"

# Έλεγχος ύπαρξης PrivacyInfo.xcprivacy στην εφαρμογή
find MyApp.app -name "*.xcprivacy"

Συχνά σφάλματα επικύρωσης

Το πιο συνηθισμένο σφάλμα — έλλειψη manifest σε ένα από τα SDK. Ακόμα κι αν ο κύριος στόχος περιέχει manifest, η Apple ελέγχει όλα τα δυαδικά ξεχωριστά. Το δεύτερο πιο συνηθισμένο — λανθασμένος κωδικός λόγου: χρήση λόγου για μια κατηγορία API με API από άλλη κατηγορία.

Το τρίτο σφάλμα — υπερβολική δήλωση API που στην πραγματικότητα δεν χρησιμοποιούνται. Οι προγραμματιστές προσθέτουν όλους τους πιθανούς λόγους «για κάθε ενδεχόμενο", κάτι που ανησυχεί τους ελεγκτές της Apple. Προσθέστε μόνο τις κατηγορίες που πραγματικά χρησιμοποιούνται. Χρησιμοποιήστε τον στατικό αναλυτή του Xcode για έλεγχο.

Συχνές ερωτήσεις

Τι συμβαίνει εάν δεν υπάρχει Privacy Manifest;

Από 1 Μαΐου 2024, η Apple απορρίπτει οποιαδήποτε έκδοση χωρίς manifest. Το σφάλμα εμφανίζεται στο στάδιο μεταφόρτωσης στο App Store Connect. Οι παλιές εφαρμογές δεν μπλοκάρονται, αλλά οι ενημερώσεις απαιτούν υποχρεωτική συμπερίληψη του manifest.

Απαιτείται Privacy Manifest για εφαρμογές iPadOS;

Ναι, το manifest είναι υποχρεωτικό για όλες τις πλατφόρμες Apple: iOS, iPadOS, macOS, tvOS, watchOS και visionOS. Οι απαιτήσεις για Required Reason API είναι ενιαίες για όλες τις πλατφόρμες, αν και τα σύνολα API μπορεί να διαφέρουν ελαφρώς.

Πώς να προσθέσω manifest για SDK τρίτου;

Εάν το SDK δεν παρείχε manifest, δημιουργήστε ένα ξεχωριστό αρχείο PrivacyInfo.xcprivacy και προσθέστε το στην ομάδα SDK στο έργο. Καθορίστε λόγους για τα API που χρησιμοποιεί αυτό το SDK, βάσει της τεκμηρίωσης του SDK.

Μπορεί η Apple να απορρίψει έκδοση λόγω λανθασμένου λόγου;

Ναι. Κατά τον αυτόματο έλεγχο, η Apple συγκρίνει τους δηλωμένους λόγους με τις πραγματικές κλήσεις API. Η ασυμφωνία οδηγεί σε απόρριψη. Κατά τον χειροκίνητο έλεγχο, ο ελεγκτής μπορεί να ζητήσει διευκρινίσεις.

Ελέγχεται το Privacy Manifest για Swift Package Manager;

Ναι, η Apple ελέγχει τα manifest για όλες τις εξαρτήσεις, συμπεριλαμβανομένου του SPM. Οι πάροχοι πακέτων υποχρεούνται να συμπεριλαμβάνουν το PrivacyInfo.xcprivacy στα αποθετήριά τους. Το Xcode προειδοποιεί για ελλείποντα manifest κατά την αρχειοθέτηση.

Σύνοψη

  • Privacy Manifest — υποχρεωτικό αρχείο PrivacyInfo.xcprivacy για όλες τις εφαρμογές και SDK από το 2024
  • Required Reason API — 6 κατηγορίες API που απαιτούν δήλωση συγκεκριμένου λόγου χρήσης
  • Λόγοι — μοναδικοί κωδικοί (C617.1, 35F9.1), κάθε κατηγορία έχει 1-5 επιτρεπόμενους λόγους
  • SDK — κάθε SDK τρίτου πρέπει να περιέχει το δικό του manifest στο δυαδικό
  • Επικύρωση — το Xcode ελέγχει το manifest κατά την αρχειοθέτηση, το App Store Connect κατά τη μεταφόρτωση
  • Προθεσμίες — από 1 Μαΐου 2024 όλες οι νέες εκδόσεις πρέπει να περιλαμβάνουν manifest
  • Δημιουργήστε το PrivacyInfo.xcprivacy μέσω του προτύπου Xcode και δηλώστε μόνο τα πραγματικά χρησιμοποιούμενα API

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης