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 کی منظور شدہ فہرست سے مخصوص وجہ کے اعلان کے ساتھ ہونا چاہیے۔
یکم مئی 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، صارف ID)، استعمال کا ڈیٹا (لاگ، کلکس)، تشخیص (کریش لاگ) اور صارف کا مواد (تصاویر، ویڈیوز، فائلیں)۔ ہر زمرے کو اضافی طور پر «صارف سے منسلک» یا «منسلک نہیں» کے طور پر نشان زد کیا جاتا ہے۔
منسلک کا مطلب ہے کہ ڈیٹا صارف کے اکاؤنٹ سے جڑا ہوا ہے؛ منسلک نہیں کا مطلب ہے کہ ڈیٹا جمع یا گمنام کیا گیا ہے۔ یہ نشان زد کرنا متاثر کرتا ہے کہ 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 کے حقیقی استعمال سے زیادہ قریب تر ہو۔ غلط وجہ فراہم کرنے سے بلڈ مسترد یا اکاؤنٹ معطل ہو سکتا ہے۔
یکم مئی 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 نیویگیٹر میں دکھایا جاتا ہے، جس میں مسئلہ 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 سٹیٹک تجزیہ کار استعمال کریں۔
اکثر پوچھے گئے سوالات
یکم مئی 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں