Privacy Manifest (PrivacyInfo.xcprivacy) एक फ़ाइल है जिसे सभी एप्लिकेशन और तीसरे पक्ष के SDK को वसंत 2024 से iOS बिल्ड में शामिल करना आवश्यक है। Apple को संरक्षित API (Required Reason API) के उपयोग के कारणों और एकत्रित डेटा के प्रकारों की घोषणा करने की आवश्यकता है। Apple डेवलपर दस्तावेज़ीकरण के अनुसार, एप्लिकेशन के भीतर प्रत्येक बाइनरी — मुख्य लक्ष्य, फ्रेमवर्क, Swift Package Manager निर्भरताएँ — में अपना स्वयं का Privacy Manifest होना चाहिए।
मुख्य बिंदु
Privacy Manifest एक PrivacyInfo.xcprivacy फ़ाइल है जो property list (XML) प्रारूप में घोषित करती है कि एप्लिकेशन किस प्रकार का डेटा एकत्र करता है और वह कुछ API का उपयोग क्यों करता है। Apple ने Privacy Nutrition Label के समान, लेकिन कोड और बाइनरी स्तर पर, गोपनीयता पारदर्शिता बढ़ाने की पहल के हिस्से के रूप में मेनिफेस्ट पेश किए।
मेनिफेस्ट का मुख्य उद्देश्य तथाकथित Required Reason API के उपयोग का दस्तावेजीकरण करना है। ये API श्रेणियाँ हैं जिनका उपयोग डिवाइस की डिजिटल फिंगरप्रिंटिंग के लिए किया जा सकता है, इसलिए प्रत्येक उपयोग Apple की अनुमोदित सूची से एक विशिष्ट कारण की घोषणा के साथ होना चाहिए।
1 मई 2024 से, Apple उन बिल्ड को अस्वीकार करता है जिनमें Privacy Manifest नहीं है। यह एप्लिकेशन के मुख्य लक्ष्यों और सभी एम्बेडेड SDK और निर्भरताओं दोनों पर लागू होता है। WWDC 2023 के अनुसार, App Store के माध्यम से वितरित सभी एप्लिकेशन के लिए मेनिफेस्ट अनिवार्य है।
मेनिफेस्ट प्रत्येक बाइनरी में मौजूद होना चाहिए — न केवल मुख्य एप्लिकेशन में बल्कि प्रत्येक फ्रेमवर्क और स्थिर लाइब्रेरी में भी। यदि किसी तीसरे पक्ष के SDK ने मेनिफेस्ट प्रदान नहीं किया है, तो डेवलपर को इसे मैन्युअल रूप से जोड़ना होगा या अपडेट के लिए SDK विक्रेता से संपर्क करना होगा।
मेनिफेस्ट से पहले, डेवलपर बिना पारदर्शी स्पष्टीकरण के व्यापक सिस्टम API (फ़ाइल सिस्टम एक्सेस, दिनांक/समय, सिस्टम लॉग) का उपयोग कर सकते थे। इससे तीसरे पक्ष के SDK के माध्यम से डेटा लीक का जोखिम पैदा होता था जो डेवलपर की जानकारी के बिना जानकारी एकत्र कर सकते थे।
Mysk Inc. (2023) के अनुसार, कई लोकप्रिय SDK ने स्पष्ट आवश्यकता के बिना डिवाइस फिंगरप्रिंटिंग के लिए API का उपयोग किया — उदाहरण के लिए, समय क्षेत्र निर्धारित करने के लिए अपटाइम पढ़ना या मेटाडेटा एकत्र करने के लिए निर्देशिकाओं को स्कैन करना। Privacy Manifest ऐसी प्रत्येक कार्रवाई की घोषणा करने के लिए बाध्य करता है।
Required Reason API के अलावा, मेनिफेस्ट में NSPrivacyTracking अनुभाग शामिल है — एक फ़्लैग जो इंगित करता है कि ऐप ट्रैकिंग का उपयोग करता है या नहीं (ATT की आवश्यकता है), और NSPrivacyCollectedDataTypes — Privacy Nutrition Label प्रारूप में एकत्रित डेटा प्रकारों की सूची।
Privacy Nutrition Label App Store में एप्लिकेशन पेज पर उपयोगकर्ता के सामने आने वाला प्रतिनिधित्व है, जो दिखाता है कि ऐप कौन सा डेटा एकत्र करता है। Privacy Manifest बाइनरी के अंदर एक तकनीकी फ़ाइल है जिसे Apple स्वचालित रूप से जाँचता है। यदि मेनिफेस्ट में डेटा App Store Connect में लेबल से मेल नहीं खाता है, तो Apple बिल्ड को अस्वीकार कर देता है।
इस प्रकार, मेनिफेस्ट Apple की सत्यापन प्रणाली के लिए सत्य का स्रोत है। इसके आधार पर गोपनीयता लेबल स्वचालित रूप से उत्पन्न होते हैं, लेकिन डेवलपर को दोनों प्रतिनिधित्व को अद्यतित रखना चाहिए। प्रकाशन के बाद मेनिफेस्ट बदलने के लिए समीक्षा के लिए नया बिल्ड जमा करना आवश्यक है।
PrivacyInfo.xcprivacy फ़ाइल property list प्रारूप का उपयोग करती है जिसमें मूल प्रकार Dictionary होता है। मुख्य शीर्ष-स्तरीय कुंजियाँ हैं: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array)।
NSPrivacyTracking कुंजी — एक बूलियन मान जो इंगित करता है कि ऐप ट्रैकिंग लागू करता है या नहीं (ATT की आवश्यकता है)। यदि true है, तो Info.plist में NSUserTrackingUsageDescription भी निर्दिष्ट करना होगा। NSPrivacyTrackingDomains कुंजी — डोमेन की एक सरणी जहाँ ट्रैकिंग लागू की जाती है।
NSPrivacyCollectedDataTypes कुंजी — शब्दकोशों की एक सरणी, प्रत्येक एकत्रित डेटा के प्रकार का वर्णन करता है: श्रेणी (NSPrivacyCollectedDataType), लिंकेज (NSPrivacyCollectedDataLinked), उद्देश्य (NSPrivacyCollectedDataTypePurposes)। उद्देश्यों में शामिल हैं: तीसरे पक्ष का विज्ञापन, विश्लेषण, उत्पाद विकास और सामग्री वैयक्तिकरण।
NSPrivacyAccessedAPITypes कुंजी — प्रत्येक Required Reason API श्रेणी के लिए शब्दकोशों की एक सरणी: श्रेणी (NSPrivacyAccessedAPITypeReasons) — Apple की अनुमोदित सूची से एक विशिष्ट कारण, और NSPrivacyAccessedAPIType — 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>
डेटा प्रकार कई श्रेणियों में विभाजित हैं: संपर्क जानकारी (नाम, ईमेल, फ़ोन), वित्त (भुगतान डेटा), पहचानकर्ता (IDFA, उपयोगकर्ता आईडी), उपयोग डेटा (लॉग, क्लिक), डायग्नोस्टिक्स (क्रैश लॉग) और उपयोगकर्ता सामग्री (फ़ोटो, वीडियो, फ़ाइलें)। प्रत्येक श्रेणी को अतिरिक्त रूप से «उपयोगकर्ता से संबद्ध» या «संबद्ध नहीं» के रूप में चिह्नित किया जाता है।
संबद्ध का अर्थ है कि डेटा उपयोगकर्ता के खाते से जुड़ा है; संबद्ध नहीं का अर्थ है कि डेटा एकत्रित या अनामीकृत है। यह चिह्न प्रभावित करता है कि Apple गोपनीयता लेबल कैसे प्रदर्शित करता है: संबद्ध डेटा पीले रंग में चिह्नित होता है, संबद्ध नहीं — हरे रंग में।
Apple ने कई API श्रेणियों की पहचान की है, प्रत्येक का उपयोग अनुमोदित सूची से एक विशिष्ट कारण के साथ होना चाहिए। कारण एक अद्वितीय कोड है, उदाहरण के लिए C617.1 या 35F9.1, जो Apple द्वारा अनुमत एक विशिष्ट उद्देश्य से मेल खाता है।
NSPrivacyAccessedAPICategoryFileTimestamp श्रेणी में फ़ाइल टाइमस्टैम्प (creationDate, modificationDate) तक पहुँचने के लिए API शामिल हैं। कारण: C617.1 (फ़ाइल सिंक्रनाइज़ेशन), 3B52.1 (बैकअप), 0A2A.1 (एंटीफ्रॉड)।
NSPrivacyAccessedAPICategoryDiskSpace श्रेणी में डिस्क खाली स्थान की जाँच के लिए API शामिल हैं (NSFileManager. जाँच (NSFileManager)। कारण: E174.1 (कैश प्रबंधन), 85F4.1 (सामग्री डाउनलोड), B728.1 (निदान)।
NSPrivacyAccessedAPICategorySystemBootTime श्रेणी में सिस्टम बूट समय (अपटाइम) तक पहुँचने के लिए API शामिल हैं। केवल एक कारण: 35F9.1 (विश्लेषण के लिए सत्र समय माप)। कोई भी अन्य उपयोग फिंगरप्रिंटिंग माना जाता है।
प्रत्येक श्रेणी में 1 से 5 अनुमोदित कारण होते हैं। डेवलपर को वह कारण चुनना होगा जो API के वास्तविक उपयोग से सबसे अधिक मेल खाता हो। गलत कारण प्रदान करने से बिल्ड अस्वीकृति या खाता प्रतिबंध हो सकता है।
1 मई 2024 से, सभी तीसरे पक्ष के SDK — बाइनरी और ओपन सोर्स दोनों — को अपने पैकेज में Privacy Manifest शामिल करना अनिवार्य है। Apple सभी निर्भरताओं के लिए मेनिफेस्ट की जाँच करता है, और यदि कम से कम एक SDK के पास मेनिफेस्ट नहीं है, तो बिल्ड अस्वीकार कर दिया जाएगा।
प्रमुख SDK (Firebase, Adjust, AppsFlyer, Facebook SDK) ने पहले ही अपने पैकेज अपडेट कर लिए हैं। यदि आपका प्रोजेक्ट किसी अल्पज्ञात SDK का उपयोग करता है, तो उसके संस्करण की जाँच करें और यदि आवश्यक हो तो अपडेट करें या डेवलपर से संपर्क करें। एक अस्थायी समाधान प्रोजेक्ट में SDK के लिए मैन्युअल रूप से मेनिफेस्ट जोड़ना है, लेकिन अपडेट के दौरान विसंगतियों के कारण इसकी अनुशंसा नहीं की जाती है।
आप Xcode 15+ में अंतर्निहित टेम्पलेट के माध्यम से या मैन्युअल रूप से PrivacyInfo.xcprivacy बना सकते हैं। दोनों विकल्पों पर विचार करें।
Xcode 15 में Privacy Manifest टेम्पलेट शामिल है: File → New → File → Resource → Privacy Manifest। Xcode मूल संरचना के साथ एक फ़ाइल बनाता है और NSPrivacyTracking और API और डेटा के लिए खाली सरणियाँ भरता है। निर्माण के बाद, आपको प्रत्येक उपयोग किए गए Required Reason API के लिए मैन्युअल रूप से कारण निर्दिष्ट करने होंगे।
टेम्पलेट स्वचालित रूप से फ़ाइल को मुख्य लक्ष्य में जोड़ता है। यदि प्रोजेक्ट में कई लक्ष्य हैं (Extensions, Watch app), तो आपको प्रत्येक में मेनिफेस्ट जोड़ना होगा। Xcode संकलन समय पर निर्भरताओं में मेनिफेस्ट की उपस्थिति की जाँच नहीं करता — केवल आर्काइविंग चरण पर।
// AppDelegate: डेवलपमेंट चरण में मेनिफेस्ट की जाँच
import Foundation
func validatePrivacyManifest() {
guard let path = Bundle.main.path(
forResource: "PrivacyInfo", ofType: "xcprivacy"
) else {
print("PrivacyInfo.xcprivacy नहीं मिला")
return
}
guard let dict = NSDictionary(contentsOfFile: path)
else { return }
print("Privacy manifest loaded: \(dict.count) keys")
}
आप PrivacyInfo.xcprivacy को मैन्युअल रूप से एक सामान्य XML property list फ़ाइल के रूप में बना सकते हैं। ऐसा करने के लिए, PrivacyInfo.xcprivacy नामक एक फ़ाइल बनाएँ, मानक plist हेडर लिखें और आवश्यक कुंजियों के साथ एक रूट डिक्शनरी जोड़ें। सुनिश्चित करें कि फ़ाइल लक्ष्य में जोड़ी गई है (Target Membership)।
मैन्युअल विधि उपयोगी है जब आपको Xcode UI का उपयोग किए बिना स्थिर लाइब्रेरी या Package Manager निर्भरता में मेनिफेस्ट जोड़ने की आवश्यकता होती है। संकलन के बाद, nm कमांड या आर्काइविंग के माध्यम से सत्यापित करें कि फ़ाइल बाइनरी में शामिल है।
App Store में बिल्ड जमा करने से पहले, आपको सत्यापित करना होगा कि Privacy Manifest सही और पूर्ण है। Apple कई सत्यापन उपकरण प्रदान करता है।
प्रोजेक्ट को आर्काइव करते समय (Product → Archive), Xcode मेनिफेस्ट सत्यापन करता है। यदि कोई त्रुटि पाई जाती है — लापता मेनिफेस्ट, गलत कारण, खाली श्रेणी — आर्काइविंग त्रुटि के साथ विफल हो जाती है। त्रुटि लॉग Issue navigator में प्रदर्शित होता है, जो समस्याग्रस्त SDK और API श्रेणी को इंगित करता है।
बिल्ड अपलोड करते समय App Store Connect की ओर से अतिरिक्त सत्यापन किया जाता है। यदि सत्यापन विफल होता है, तो बिल्ड को समस्याग्रस्त API के पहचानकर्ता और अनुशंसित सुधार वाले स्वचालित ईमेल के साथ अस्वीकार कर दिया जाता है।
सत्यापन को स्वचालित करने के लिए, उन स्क्रिप्ट का उपयोग करें जो Required Reason API के उपयोग के लिए बाइनरी का विश्लेषण करती हैं। Apple libtool टूल और प्रतीक जाँच स्क्रिप्ट प्रदान करता है, लेकिन समुदाय ने अधिक सुविधाजनक उपयोगिताएँ विकसित की हैं।
# बाइनरी में FileTimestamp API उपयोग की खोज
nm MyApp.app/MyApp | grep "NSFileCreationDate"
# एप्लिकेशन में PrivacyInfo.xcprivacy की उपस्थिति की जाँच
find MyApp.app -name "*.xcprivacy"
सबसे आम त्रुटि किसी एक SDK में मेनिफेस्ट की अनुपस्थिति है। भले ही मुख्य लक्ष्य में मेनिफेस्ट हो, Apple प्रत्येक बाइनरी की अलग-अलग जाँच करता है। दूसरी सबसे आम त्रुटि गलत कारण कोड है — एक API श्रेणी के लिए दूसरी श्रेणी के API के साथ कारण का उपयोग करना।
तीसरी त्रुटि उन API की अत्यधिक घोषणा है जो वास्तव में उपयोग नहीं की जाती हैं। डेवलपर «बस मामले में» सभी संभावित कारण जोड़ते हैं, जो Apple समीक्षकों को संदेहास्पद बनाता है। केवल वे श्रेणियाँ जोड़ें जो वास्तव में उपयोग की जाती हैं। सत्यापन के लिए Xcode स्थैतिक विश्लेषक का उपयोग करें।
अक्सर पूछे जाने वाले प्रश्न
1 मई 2024 से, Apple बिना मेनिफेस्ट के किसी भी बिल्ड को अस्वीकार करता है। त्रुटि App Store Connect में अपलोड करने के चरण पर होती है। पुराने एप्लिकेशन ब्लॉक नहीं किए जाते, लेकिन अपडेट के लिए मेनिफेस्ट का अनिवार्य समावेश आवश्यक है।
हाँ, मेनिफेस्ट सभी Apple प्लेटफ़ॉर्म के लिए अनिवार्य है: iOS, iPadOS, macOS, tvOS, watchOS और visionOS। Required Reason API की आवश्यकताएँ सभी प्लेटफ़ॉर्म पर समान हैं, हालाँकि API सेट थोड़े भिन्न हो सकते हैं।
यदि SDK ने मेनिफेस्ट प्रदान नहीं किया है, तो एक अलग PrivacyInfo.xcprivacy फ़ाइल बनाएँ और इसे प्रोजेक्ट में SDK समूह में जोड़ें। SDK के दस्तावेज़ीकरण के आधार पर इस SDK द्वारा उपयोग की जाने वाली API के लिए कारण निर्दिष्ट करें।
हाँ। स्वचालित जाँच के दौरान, Apple घोषित कारणों की तुलना वास्तविक API कॉल से करता है। बेमेल होने पर अस्वीकृति होती है। मैन्युअल समीक्षा के दौरान, समीक्षक स्पष्टीकरण का अनुरोध कर सकता है।
हाँ, Apple SPM सहित सभी निर्भरताओं के लिए मेनिफेस्ट की जाँच करता है। पैकेज प्रदाता अपने रिपॉजिटरी में PrivacyInfo.xcprivacy शामिल करने के लिए बाध्य हैं। Xcode आर्काइविंग के दौरान लापता मेनिफेस्ट के बारे में चेतावनी देता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें