Info.plist iOS और macOS एप्लिकेशन के लिए एक XML कॉन्फ़िगरेशन फ़ाइल है जिसमें मेटाडेटा, अनुमतियाँ और लॉन्च सेटिंग्स होती हैं। इसे सिस्टम द्वारा एप्लिकेशन कोड इनिशियलाइज़ेशन से पहले प्रोसेस किया जाता है। Apple Developer, 2025 के अनुसार, सही ढंग से कॉन्फ़िगर किए गए Info.plist के बिना, एप्लिकेशन App Store समीक्षा पास नहीं करेगा। Info.plist बंडल पहचानकर्ता, बिल्ड संस्करण, अनुरोधित अनुमतियाँ और समर्थित स्क्रीन ओरिएंटेशन को परिभाषित करता है।
मुख्य बातें
Info.plist XML प्रारूप में एक फ़ाइल है जिसमें रूट एलिमेंट dict होता है जिसमें प्रॉपर्टी लिस्ट के रूप में की-वैल्यू जोड़े होते हैं। यह एप्लिकेशन बंडल के अंदर स्थित होता है और कोड निष्पादन से पहले प्रत्येक लॉन्च पर सिस्टम द्वारा पढ़ा जाता है। 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 का समर्थन करने के लिए, Entitlements फ़ाइल में कुंजी com.apple.developer.associated-domains की आवश्यकता है, Info.plist में नहीं। 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) HTTPS की आवश्यकता के लिए डिफ़ॉल्ट रूप से सभी HTTP कनेक्शन को ब्लॉक करता है। विशिष्ट डोमेन के लिए अस्थायी रूप से 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 प्रोजेक्ट्स के समान काम करता है। इसके अतिरिक्त, UIApplicationSceneManifest कुंजी की आवश्यकता हो सकती है यदि प्रोजेक्ट सीन प्रबंधन के लिए App प्रोटोकॉल का उपयोग नहीं करता है। SwiftUI App प्रोटोकॉल स्वचालित रूप से सीन कॉन्फ़िगरेशन उत्पन्न करता है, लेकिन अनुकूलन के लिए मैन्युअल रूप से कुंजियाँ जोड़ने की आवश्यकता होती है।
Xcode में Info.plist खोलें, प्लस बटन पर क्लिक करें और कुंजी का नाम दर्ज करें। कस्टम कुंजियों के लिए, Apple सिस्टम कुंजियों के साथ टकराव से बचने के लिए कंपनी उपसर्ग का उपयोग करें, उदाहरण के लिए सिर्फ CustomKey के बजाय ITSCustomKey। मान प्रकार (String, Number, Array, Dictionary) अपेक्षित डेटा प्रारूप के आधार पर चुना जाता है।
सामान्य कारण: अनुरोधित अनुमतियों के लिए गोपनीयता कुंजियों की कमी, गलत CFBundleIdentifier, Info.plist और App Store Connect के बीच संस्करण बेमेल, खाली NS कुंजी मान। उपयोग किए जा रहे APIs के लिए सभी NS कुंजियाँ जाँचें और सुनिश्चित करें कि प्रत्येक विवरण में ऐप के स्थानीयकरण भाषा में एक सार्थक स्पष्टीकरण हो।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें