Info.plist iOS اور macOS ایپلیکیشنز کے لیے ایک XML ترتیب فائل ہے جس میں میٹا ڈیٹا، اجازتیں اور لانچ ترتیبات شامل ہیں۔ یہ سسٹم کے ذریعے ایپلیکیشن کوڈ کے آغاز سے پہلے پروسیس کیا جاتا ہے۔ Apple Developer, 2025 کے مطابق، مناسب طریقے سے ترتیب دیے گئے Info.plist کے بغیر، ایپلیکیشن App Store کا جائزہ پار نہیں کرے گا۔ Info.plist بنڈل پہچانندہ، بلڈ ورشن، مانگی گئی اجازتیوں اور معاون سکرین وجوہات کی وضاحت کرتا ہے۔
اہم نکات
Info.plist XML فارمیٹ میں ایک فائل ہے جس کا روٹ ایلیمنٹ dict ہے جس میں property list کی شکل میں کنجی-قیمت کے جوڑے ہوتے ہیں۔ یہ ایپلیکیشن بنڈل کے اندر واقع ہے اور کوڈ کے عمل کرنے سے پہلے ہر لانچ پر سسٹم کے ذریعے پڑھا جاتا ہے۔ plist فارمیٹ سترینگز، عدد، ارے، لغت، تاریخیں اور بولین قیمتوں کی حمایت کرتا ہے، جو پیچیدہ ترتیبات کی وضاحت کی اجازت دیتا ہے۔
Apple ایپلیکیشن کی شناخت، صلاحیتوں اور ضروریات کی وضاحت کے لیے Info.plist استعمال کرتا ہے۔ کچھ کنجیوں کو بدلنے کے لیے بنڈل کی دوبارہ تعمیر کی ضرورت ہے، کیونکہ وے ان میٹا ڈیٹا کو متاثر کرتے ہیں جینہیں App Store بلڈ اپلوڈ کرتے وقت چیک کرتا ہے۔ مثال کے طور، اشاعہ کے بعد CFBundleVersion یا CFBundleIdentifier کو بدلنے سے ایپ اپڈیٹ کا عمل میں خلل پیدا ہو سکتا ہے، کیونکہ App Store Connect ورشن کی شناخت کے لیے ان قیمتوں کا استعمال کرتا ہے۔
بنیادی کنجیاں Xcode میں پروجیکٹ بناتے وقت خود کار بن جاتی ہیں، لیکن زیادہ تر ترتیبات ایپلیکیشن کی فنکشنالیٹی کے ارتقاء کے ساتھ دستی شامل کی جاتی ہیں۔ Xcode معیاری کنجیوں کے لیے ڈراپ ڈائن فہرستوں کے ساتھ ایک گرافیکل Info.plist ایڈیٹر فراہم کرتا ہے، جو غلطیوں کے خطرے کو کم کرتا ہے۔ تاہم، Scene Manifest یا Background Modes جیسی پیچیدہ ترتیبات کے لیے، براہ راست XML کو ترتیب دینے کی سفارش کی جاتی ہے۔
کچھ Info.plist کنجیاں App Store میں شائع کرنے کے لیے لازمی ہیں۔ ان کی غیر موجودگی تصدیق کے مرحلے پر بلڈ کی مستردی کا سبب بنتی ہے۔ Apple Xcode Organizer یا Transporter کے ذریعے آرکائیو اپلوڈ کرتے وقت خود کار ان کنجیوں کو چیک کرتا ہے۔ ڈیویلپر کو جائزہ کے لیے جمع کرنے سے پہلے یقینی بنانا چاہیے کہ تمام لازمی فیلڈز درست طریقے سے پر ہیں۔
CFBundleIdentifier کنجی الٹ ڈومین نوٹیشن (com.company.appname) میں ایک منفرد ایپلیکیشن پہچانندہ مقرر کرتی ہے۔ یہ کوڈ سائنگ، Push Notifications، CloudKit، App Groups اور بہت سی دیگر Apple خدمات کے لیے استعمال ہوتی ہے۔ اشاعہ کے بعد پہچانندہ کو بدلنے کو App Store ایک نئی ایپلیکیشن کے طور پر لیتا ہے، اور موجودہ صارفین اپڈیٹ حاصل نہیں کریں گے۔ لہذا، پہچانندہ پورے ایپلیکیشن لائف سائکل کے دوران نابدل رہنا چاہیے۔
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
CFBundleShortVersionString (ظاہر شدہ ورشن) اور CFBundleVersion (بلڈ نمبر) کی کنجیاں App Store Connect اور سسٹم کے ذریعے اپڈیٹ منیجمنٹ کے لیے استعمال ہوتی ہیں۔ ورشن major.minor.patch فارمیٹ میں متعین کی جاتی ہے۔ بلڈ نمبر کو اپلیکیشن کے ورشن میں تبدیلی کے بغیر App Store Connect پر اپلوڈ کیے گئے ہر بلڈ کے ساتھ بڑھنا چاہیے۔ Apple اس بات کا تعین کرنے کے لیے CFBundleVersion کا استعمال کرتا ہے کہ بلڈ نیا ہے یا پہلے سے اپلوڈ کیے گئے بلڈ کی نقل ہے۔ اگر بلڈ نمبر پہلے سے اپلوڈ کیے گئے بلڈ سے ملتا ہے، تو ITMS-90161 خرابی واپس کی جاتی ہے۔
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
UISupportedInterfaceOrientations کنجیاں iPhone کے لیے معاون سکرین وجوہات کی وضاحت کرتی ہیں۔ iPad کے لیے، آلے کے لحقے کے ساتھ ایک علاحدہ کنجی UISupportedInterfaceOrientations~ipad استعمال ہوتی ہے۔ ہر وجہ ایک سترینگ کے طور پر متعین کی جاتی ہے: UIInterfaceOrientationPortrait، UIInterfaceOrientationLandscapeLeft، UIInterfaceOrientationLandscapeRight، UIInterfaceOrientationPortraitUpsideDown۔ اگر کوئی ایپ صرف پورٹریٹ وجہ کی حمایت کرتا ہے اور صرف iPhone کے لیے نہیں ہے، تو App Store بلڈ کو مسترد کر دے گا اگر iPad کے لیے صرف پورٹریٹ متعین کی گئی ہے۔
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
iOS 10 سے، Apple کو NS سابقے (NeXTStep) والی کنجیوں کے ذریعے طلب کردہ ہر اجازت کے لیے ایک تفصیل کا مطالبہ کرتا ہے۔ پرائیویٹ APIs تک پہلی رسائی کے موقع پر یہ تفصیل صارف کو سسٹم ڈائے لاگ میں دیکھائی جاتی ہے۔ ایسی API کو کال کرتے وقت جسے اجازت درکار ہو، مناسب NS کنجی کی غیر موجودگی ایپلیکیشن کی فوری بندش کا سبب بنتی ہے جو صرف کریش لاگز میں ریکورڈ ہوتی ہے۔
| کنجی | مقصد |
|---|---|
| NSCameraUsageDescription | فوٹو اور ویڈیو کے لیے کیمرے تک رسائی |
| NSPhotoLibraryUsageDescription | فوٹو لائبریری تک رسائی |
| NSLocationWhenInUseUsageDescription | استعمال کے دوران جیولوکیشن |
| NSMicrophoneUsageDescription | آڈیو ریکارڈنگ کے لیے مائیکروفون تک رسائی |
| NSContactsUsageDescription | ڈیوائس کے رابطوں تک رسائی |
ہر رازداری کنجی میں درخواست کی وجہ کی صارف کے لیے قابل فہم تفصیل ہونی چاہیے۔ خالی یا سانچہ متون، جیسے “ایپ کے آپریشن کے لیے” یا “رسائی ضروری ہے”، App Store مستردی کا سبب بنتے ہیں۔ تفصیل میں مخصوص فنکشنالیٹی کی وضاحت ہونی چاہیے: “QR کوڈ سکان کرنے اور پروفائل فوٹو بنانے کے لیے کیمرے تک رسائی ضروری ہے۔” ہر معاون زبان کے لیے InfoPlist.strings فائلوں کے ذریعے تفصیلات کے مقامی نسخوں کا استعمال کرنے کی سفارش کی جاتی ہے۔
ذاتی ڈیٹا تک رسائی کے لیے ایک API کو کال کرتے وقت ماپھول NS کنجی کی غیر موجودگی ایپلیکیشن کو کریش کرتی ہے۔ سسٹم ایک استثنا کے ساتھ عمل کو ختم کر دیتا ہے، جو صرف Xcode یا Firebase Crashlytics کے کریش ریپورٹ لاگز میں نظر آتا ہے۔ صارف کو بغیر کسی وضاحت کے صرف ایپ کی اچانک بندش نظر آتی ہے۔ لہذا، کیمرہ، مائیکروفون یا جیولوکیشن استعمال کرنے والی نئی فنکشنالیٹی شامل کرنے سے پہلے، پہلے Info.plist میں مناسب رازداری کنجی شامل کریں، پھر API کال نفذ کریں۔
CFBundleURLTypes کنجی ایپلیکیشن میں گھریرے لنکس کے لیے کسٹم URL اسکیمز رجسٹر کرتی ہے۔ یہ براؤزر، ای میل یا دیگر ایپلیکیشنز سے myapp://profile/123 جیسے لنکس کے ذریعے ایپ کو کھولنے کی اجازت دیتا ہے۔ ہر اسکیم ایپلیکیشن کی منفرد طور پر شناخت کرتا ہے: اگر دو ایپس ایک ہی اسکیم رجسٹر کرتے ہیں، تو سسٹم صارف کو ایک ڈائے لاگ دیکھاتا ہے کہ کون سا استعمال کرنا ہے۔
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Universal Links کی حمایت کے لیے، Info.plist میں نہیں بلکہ Entitlements فائل میں com.apple.developer.associated-domains کنجی درکار ہے۔ Universal Links صرف اس وقت کام کرتے ہیں جب سرور پر ایک ترتیب شدہ apple-app-site-association فائل موجود ہو جو ڈومین کو ایپلیکیشن سے منسوک کرتا ہو۔ کسٹم URL اسکیمز کے برعکس، Universal Links کوئی تصدیقی ڈائے لاگ نہیں دیکھاتے اور دیگر ایپلیکیشنز سے متصادم نہیں کرتے، کیونکہ وے کسٹم اسکیمز کے بجائے HTTPS لنکس استعمال کرتے ہیں۔ تاہم، انہیں ایک مناسب SSL سرٹفکیٹ کے ساتھ ایک ڈومین کی ضرورت ہوتی ہے۔
کسٹم اسکیم معیاری iOS اسکیمز سے متصادم کر سکتے ہیں۔ دیگر ایپس کے ساتھ تصادم کو کم کرنے کے لیے کم از کم 4 حروف کے اسکیم استعمال کرنے کی سفارش کی جاتی ہے۔ مثال کے طور، اسکیم “fb” بہت چھوٹا ہے اور تصادم کا سبب بن سکتا ہے۔ انورٹ نوٹیشن استعمال کرنا بہتر ہے: app:// کے بجائے myapp://۔ یہ بھی یاد رکھیں کہ اگر ایپ حذف کر دیا گیا لیکن کسی دوسرے ایپ نے وہی اسکیم رجسٹر کر لیا ہے، تو صارف کو لنک کے ذریعے نیویگیٹ کرتے وقت غیر متوقع رویہ کا سامنا کرنا پڑ سکتا ہے۔
UIBackgroundModes کنجی ایپلیکیشن کی پس منظر کی صلاحیتوں کا اعلان کرتی ہے۔ ہر موڈ کے لیے Info.plist میں ایک مناسب تفصیل اور Xcode پروجیکٹ کی صلاحیتوں میں تصدیق درکار ہے۔ کسی موڈ کی وضاحت کے بغیر، سسٹم 30 سیکنڈ کے بعد یا وسائل کی کمی کی صورت میں پس منظر کے کام کو زبردستی ختم کر سکتا ہے۔
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
UIApplicationSupportsMultipleScenes کنجی iPad اور Mac Catalyst پر ملٹی ٹاسکنگ کی حمایت کو فعال کرتی ہے۔ اس کنجی کے بغیر، ایپلیکیشن متعدد وینڈوز کے انتظام کے لیے SwiftUI ScenePhase یا UIKit UISceneDelegate استعمال نہیں کر سکتا۔ iPadOS پر، صارف ایک ہی ایپ کے متعدد وینڈوز کھول سکتے ہیں، ان کے درمیان مواد گھسیٹ سکتے ہیں اور Split View استعمال کر سکتے ہیں۔ اگر ایپلیکیشن ملٹی وینڈو موڈ کی حمایت نہیں کرتا، تو اس کنجی کو false پر سیٹ کرنے سے متعلقہ فنکشنالیٹی منتقل ہو جاتی ہے۔
LSRequiresIPhoneOS کنجی iPad پر ایپ کی انسٹالیشن کو روکتی ہے۔ یہ صرف ان iPhone ایپس کے لیے استعمال ہوتی ہے جو iPad انٹرفیس کی حمایت نہیں کرتے یا بڑی سکرین کے مطابق نہیں کیے گئے ہیں۔ تاہم، Apple بگیر ضرورت اس کنجی کا استعمال کرنے کی سفارش نہیں کرتا، کیونکہ صارفین توقع کرتے ہیں کہ ایپس iOS اور iPadOS چلانے والے تمام آلات پر کام کریں۔ اگر ایپ اب بھی iPhone تک محدود ہے، تو یقینی بنائیں کہ یہ ضرورت تکنیکی طور پر جائز ہے اور App Store کی تفصیل میں بتائی گئی ہے۔
UIViewControllerBasedStatusBarAppearance کنجی سٹیٹس بار کے انداز کو کنٹرول کرتی ہے۔ اگر NO پر سیٹ کی جائے، تو سٹیٹس بار کا انداز Info.plist کنجی UIStatusBarStyle کے ذریعے عالمی طور پر مقرر کیا جاتا ہے۔ اگر YES (iOS 7 سے طبق) ہو، تو ہر ViewController preferredStatusBarStyle کو اووررائیٹ کرکے اپنے سٹیٹس بار کا انتظام کر سکتا ہے۔ جدید ایپس کے لیے، مختلف سکرینز پر مختلف سٹیٹس بار انداز رکھنے کے لیے YES رکھنے کی سفارش کی جاتی ہے، مثال کے طور گھیرے پس منظر پر ہلکا اور ہلکے پس منظر پر گھیرا۔
UIApplicationExitsOnSuspend کنجی پس منظر میں جانے پر معطل کرنے کے بجائے ایپ کو مکمل طور پر ختم کرنے پر مجبور کرتی ہے۔ یہ کم ہی استعمال ہوتی ہے، صرف ان ایپس کے لیے جن میں سکیورٹی کے اعلی تکازے ہوں: بینکنگ ایپس یا مخفی ڈیٹا کو ۃنڈل کرنے والے ایپس۔ اس معاملے میں، صارف ایپ پر تیزی سے واپس آنے کی صلاحیت کھو دیتا ہے، اور ہر لانچ صاف حالت سے شروع ہوتا ہے۔ App Store جائزہ کے دوران اس کنجی کے استعمال کے لیے جواز طلب کر سکتا ہے۔
NSAppTransportSecurity کنجی ایپ کے نیٹ ورک کنکشنز کا انتظام کرتی ہے۔ iOS 9 سے، App Transport Security (ATS) طبق العادہ تمام HTTP کنکشنز کو بلوک کرتا ہے، HTTPS کی ضرورت ہوتی ہے۔ مخصوص ڈومینز کے لیے عارضی طور پر HTTP درخواستوں کی اجازت کے لیے، NSAppTransportSecurity کے اندر NSExceptionDomains لغت استعمال ہوتا ہے۔ ترقیاتی کام کے لیے، NSAllowsArbitraryLoads = true کے ذریعے مکمل ATS منتقلی کی اجازت ہے، لیکن Apple جواز کا مطالبہ کرتا ہے اور بنا کسی قابل وجہ ڧنیں بلڈ کی اجازت نہیں دیتا۔ پروڈکشن بلڈز میں، صارف کے ڈیٹا کو ۃنڈل کرنے والے تمام ڈومینز کے لیے ATS فعال ہونا چاہیے۔
اکثر پوچے جانے والے سوالات
Info.plist فائل ایپلیکیشن کے نام سے ملتا نام رکھتے ہوئے پروجیکٹ فائلر میں واقع ہے۔ Xcode میں، یہ Supporting Files گروپ کے اندر پروجیکٹ نیویگیٹر میں نیلی کتاب کے آئیکن کے ساتھ ظاہر ہوتا ہے۔ یہ پروجیکٹ میں Spotlight تلاش کے ذریعے بھی مل سکتا ہے۔
ہاں، Info.plist کسی بھی ٹیکسٹ ایڈیٹر یا Xcode گرافیکل انٹرفیس کے ذریعے ترتیب دیا جا سکتا ہے۔ دستی ترتیب مواد پر مکمل کنٹرول دیتا ہے لیکن XML سنٹکس پر توانہ کی ضرورت ہے: ہر کھلنے والی <key> ہدایت کا ایک مناسب </key> ہونا چاہیے، اور ڈیٹا کی اقسام Apple کی توقعات سے ملنی چاہیے۔
SwiftUI پروجیکٹس میں، Info.plist UIKit پروجیکٹس کی طرح کام کرتا ہے۔ مزید برتاں، اگر پروجیکٹ سین مینجمنٹ کے لیے App پروٹوکول استعمال نہیں کرتا، تو UIApplicationSceneManifest کنجی سین کنفگریشن کے لیے درکار ہو سکتی ہے۔ SwiftUI App پروٹوکول خود کار سین کنفگریشن تیار کرتا ہے، لیکن کسٹمائزیشن کے لیے دستی طور پر کنجیاں شامل کرنا ضروری ہے۔
Xcode میں Info.plist کو کھولیں، پلاس بٹن پر کلیک کریں اور کنجی کا نام درج کریں۔ کسٹم کنجیوں کے لیے، Apple سسٹم کی کنجیوں سے تصادم سے بچنے کے لیے کمپنی کا سابقہ استعمال کریں، مثال کے طور صرف CustomKey کے بجائے ITSCustomKey۔ قیمت کی قسم (String, Number, Array, Dictionary) متوقع ڈیٹا فارمیٹ کے مطابق چنی جاتی ہے۔
عام وجوہات: مانگی گئی اجازتیوں کے لیے رازداری کی کنجیوں کی ڨامی، غلط CFBundleIdentifier، Info.plist اور App Store Connect کے درمیان ورشن کا فرق، NS کنجیوں کی خالی قیمتیں۔ استعمال کردہ APIز کے لیے تمام NS کنجیوں کو چیک کریں اور یقینی بنائیں کہ ہر تفصیل میں ایپ کی مقامی زبان میں ایک با معنی وضاحت ہو۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں