Skip to content
Back to Blog
informational

PLIST क्या है? Apple का प्रॉपर्टी लिस्ट फॉर्मेट

2026-05-17 9 min read

संक्षिप्त उत्तर: ऐप डेटा के लिए एक संरचित कंटेनर

एक PLIST फ़ाइल—प्रॉपर्टी लिस्ट का संक्षिप्त रूप—Apple का डिफ़ॉल्ट फ़ॉर्मेट है जिसका उपयोग अपने पूरे इकोसिस्टम: macOS, iOS, iPadOS, watchOS, और tvOS में कॉन्फ़िगरेशन सेटिंग्स, प्राथमिकताएँ और सीरियलाइज़्ड डेटा स्टोर करने के लिए किया जाता है। इसकी जड़ें 1980 के दशक के अंत में NeXTSTEP तक फैली हुई हैं, और यह इस बात की रीढ़ बनी हुई है कि आपके ऐप्स आपकी पसंद को कैसे याद रखते हैं, सिस्टम सेवाएँ अपनी कॉन्फ़िगरेशन कैसे लोड करती हैं, और Xcode प्रोजेक्ट्स यह कैसे बताते हैं कि क्या बनाना है। चाहे आपको पता हो या न हो, आपके Mac पर इस समय सैकड़ों PLIST फ़ाइलें हैं। Terminal खोलें और `ls ~/Library/Preferences/` चलाएँ। आपको `com.apple.finder.plist`, `com.apple.dock.plist` और कई अन्य फ़ाइलों की एक लंबी सूची दिखाई देगी — लगभग हर उस एप्लिकेशन के लिए एक जिसे आपने कभी उपयोग किया है। ये सरल फ़ाइलें ही Finder को बताती हैं कि आपकी साइडबार कितनी चौड़ी होनी चाहिए, Dock को बताती हैं कि आपके आइकन कहाँ रहते हैं, और Safari को याद दिलाती हैं कि पिछली बार बंद करते समय कौन से टैब खुले थे। यह फ़ॉर्मेट डेटा प्रकारों के एक छोटे, निश्चित सेट का समर्थन करता है: strings, integers, floating-point numbers, booleans, dates, binary data (Data), arrays और dictionaries। यही पूरी सूची है। इसमें कोई कस्टम प्रकार, कोई इनहेरिटेंस और कोई स्कीमा नहीं है। यह कोई चूक नहीं है; यह एक जानबूझकर किया गया डिज़ाइन विकल्प है। Apple को एक ऐसे फ़ॉर्मेट की आवश्यकता थी जिसे OS न्यूनतम ओवरहेड के साथ पढ़ और लिख सके, और जो मैन्युअल संपादन के बाद किसी ऐप की स्थिति को तुरंत दूषित किए बिना बच सके।

XML बनाम बाइनरी बनाम JSON: एक ही फ़ॉर्मेट के तीन प्रकार

हालाँकि एक ही PLIST फ़ॉर्मेट है, यह तीन अलग-अलग एन्कोडिंग में आता है। इन्हें आपस में मिलाना अक्सर भ्रम का कारण बनता है। सबसे पहले है **XML PLIST**, जो मानव-पठनीय संस्करण है। इसे एक टेक्स्ट एडिटर में खोलें और आपको एक DOCTYPE डिक्लेरेशन दिखाई देगा जो `http://www.apple.com/DTDs/PropertyList-1.0.dtd` को इंगित करता है, जिसके बाद नेस्टेड टैग्स का एक समुद्र होगा: `<dict>`, `<key>`, `<string>`, `<integer>`, `<true/>`। Xcode इसका उपयोग अपनी प्रोजेक्ट फ़ाइलों के लिए करता है (`project.pbxproj` एक प्रकार है), और जब आप बैकअप या निरीक्षण के लिए सेटिंग्स निर्यात करना चाहते हैं तो यही वह है जिसकी आपको आवश्यकता होती है। इसका स्पष्ट नुकसान वर्बोसिटी है। 20 कुंजियों वाला एक साधारण डिक्शनरी आसानी से 150 लाइनों तक फैल सकता है। प्रदर्शन के लिए, macOS डिस्क पर फ़ाइलें लिखते समय लगभग हमेशा **Binary PLIST** (bplist) का उपयोग करता है। जब कोई ऐप अपनी प्राथमिकताएँ सहेजता है, तो वह आमतौर पर एक फ़ाइल लिख रहा होता है जो मैजिक बाइट्स `bplist00` से शुरू होती है। यह फ़ॉर्मेट अपने XML चचेरे भाई की तुलना में काफी अधिक कॉम्पैक्ट और पार्स करने में बहुत तेज़ है। वह 150-लाइन वाली XML फ़ाइल बाइनरी रूप में केवल 400 बाइट्स तक सिकुड़ सकती है। इसका नुकसान यह है कि आप मानक टेक्स्ट एडिटर में बाइनरी PLISTs को नहीं पढ़ सकते हैं; वे बस गड़बड़ वर्णों की तरह दिखते हैं। अंत में, **JSON PLIST** है, जो macOS 10.7 से समर्थित एक नया विकल्प है। यह मानक JSON सिंटैक्स का उपयोग करता है, लेकिन यह अभी भी मुख्य PLIST डेटा प्रकारों तक ही सीमित है। यह थोड़ा अजीब है। JSON स्वाभाविक रूप से पूर्णांकों को फ़्लोट्स से अलग नहीं करता है या इसमें एक समर्पित Date प्रकार नहीं होता है, जो कुछ सूक्ष्म सीमाएँ प्रस्तुत करता है। आपको शायद ही कभी Apple के अपने उपकरण JSON PLISTs बनाते हुए दिखाई देंगे; वे अधिकतर तब दिखाई देते हैं जब थर्ड-पार्टी बिल्ड टूल्स या CI pipelines कॉन्फ़िगरेशन फ़ाइलें उत्पन्न कर रहे होते हैं। शुक्र है, आप Apple के बिल्ट-इन `plutil` कमांड-लाइन टूल के साथ तीनों के बीच आसानी से कन्वर्ट कर सकते हैं। `plutil -convert xml1 com.apple.dock.plist -o dock_readable.plist` जैसा कमांड आपको मूल बाइनरी फ़ाइल को संशोधित किए बिना आपकी Dock प्राथमिकताओं की मानव-पठनीय कॉपी देता है।

PLIST फ़ाइलें कहाँ रहती हैं और वे क्या नियंत्रित करती हैं

जब आप किसी खराब व्यवहार वाले ऐप का समस्या निवारण कर रहे हों या सेटिंग्स को एक नई मशीन में माइग्रेट कर रहे हों, तो PLIST फ़ाइलें कहाँ मिलती हैं, यह जानना आधी लड़ाई जीतने जैसा है। वे कुछ अनुमानित स्थानों पर रहती हैं। आपकी व्यक्तिगत एप्लिकेशन सेटिंग्स `~/Library/Preferences/` में संग्रहीत होती हैं। यहीं पर आपका कस्टम Dock लेआउट, आपकी Terminal कलर स्कीम और आपके Xcode की बाइंडिंग रहती हैं, जो सभी आपके विशिष्ट उपयोगकर्ता खाते से जुड़ी होती हैं। फ़ाइलनाम एक रिवर्स-DNS नेमिंग स्कीम का पालन करते हैं, जैसे `com.apple.Terminal.plist` या `com.googlecode.iterm2.plist`। इसके विपरीत, एक Mac पर हर उपयोगकर्ता पर लागू होने वाली सेटिंग्स `/Library/Preferences/` में पाई जाती हैं। ये नेटवर्क कॉन्फ़िगरेशन और टाइम ज़ोन जैसे सिस्टम-व्यापी व्यवहारों को नियंत्रित करती हैं, और उन्हें संशोधित करने के लिए आमतौर पर व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है। PLISTs केवल प्राथमिकताएँ संग्रहीत करने से कहीं अधिक करते हैं; वे macOS ऑटोमेशन सिस्टम को भी चलाते हैं। `/Library/LaunchAgents/`, `/Library/LaunchDaemons/`, और उपयोगकर्ता-विशिष्ट `~/Library/` संस्करणों में फ़ाइलें ही पृष्ठभूमि सेवाओं और निर्धारित कार्यों को परिभाषित करती हैं। एक LaunchDaemon PLIST `launchctl` सेवा को बताता है कि कौन सा निष्पादन योग्य चलाना है, कौन से तर्क पास करने हैं, क्रैश होने पर इसे पुनरारंभ करना है या नहीं, और इसका शेड्यूल क्या है। शायद सबसे महत्वपूर्ण सभी में से `Info.plist` फ़ाइल है जो हर `.app` पैकेज के अंदर छिपी होती है। Finder में किसी भी ऐप पर राइट-क्लिक करें, Show Package Contents चुनें, और इसे देखने के लिए `Contents/Info.plist` पर जाएँ। यह फ़ाइल ऐप का आधिकारिक पहचान पत्र है, जो इसके बंडल पहचानकर्ता, न्यूनतम OS संस्करण, आवश्यक हार्डवेयर क्षमताओं, URL स्कीम्स और उन अनुमतियों की घोषणा करती है जिनकी उसे आवश्यकता है (जैसे कैमरा या माइक्रोफ़ोन एक्सेस)। iOS पर, `Info.plist` ही वह है जिसका उपयोग App Store और OS स्वयं यह तय करने के लिए करते हैं कि आपका ऐप किसी दिए गए डिवाइस पर चल सकता है या नहीं। एक महत्वपूर्ण चेतावनी: यदि आप `~/Library/Preferences/` में किसी फ़ाइल को संपादित करने की योजना बना रहे हैं, तो हमेशा पहले संबंधित ऐप को बंद कर दें। ऐप के चलने के दौरान फ़ाइल पढ़ना ठीक है, लेकिन यदि आप परिवर्तन लिखते हैं, तो ऐप अगली बार अपनी स्थिति सहेजते समय उन्हें अधिलेखित कर देगा। ऐप को बंद करें, अपने संपादन करें, फिर पुनरारंभ करें।

PLIST फ़ाइलें पढ़ना और संपादित करना: आपके व्यावहारिक विकल्प

Apple PLIST फ़ाइलों को पढ़ने और संशोधित करने के लिए एक पूरा टूलकिट प्रदान करता है, जिसमें पॉलिश किए गए ग्राफिकल इंटरफेस से लेकर शक्तिशाली कमांड-लाइन यूटिलिटीज तक शामिल हैं। अधिकांश डेवलपर्स के लिए, **Xcode का बिल्ट-इन PLIST एडिटर** शुरू करने के लिए सबसे अच्छी जगह है। यह किसी भी PLIST फ़ाइल को टाइप-अवेयर एडिटिंग के साथ एक संरचित ट्री व्यू में खोलता है: आपको बूलियन के लिए चेकबॉक्स, Date मानों के लिए डेट पिकर, और बड़े करीने से विस्तार योग्य arrays और dictionaries मिलते हैं। आप रॉ XML को छुए बिना कुंजियाँ जोड़, हटा और पुनर्व्यवस्थित कर सकते हैं। यह `Info.plist` और एंटाइटेलमेंट फ़ाइलों को संपादित करने के लिए मानक, स्वीकृत कार्यप्रवाह है। स्क्रिप्टिंग और ऑटोमेशन के लिए, **`plutil` कमांड-लाइन टूल** अपरिहार्य है। यह macOS के साथ आता है और सत्यापन, रूपांतरण और कुंजी-स्तर संपादन के लिए एक पावरहाउस है। `plutil -lint myfile.plist` सिंटैक्स त्रुटियों के लिए तुरंत जाँच करता है, जबकि `plutil -replace NSHighResolutionCapable -bool YES MyApp.app/Contents/Info.plist` जैसा कमांड एडिटर खोले बिना एक कुंजी सेट कर सकता है। यह शेल स्क्रिप्ट्स और CI/CD pipelines के लिए एक अनिवार्य उपकरण है। जब आप उपयोगकर्ता प्राथमिकताएँ बदलना चाहते हैं, तो **`defaults` कमांड** इस काम के लिए सही उपकरण है। आप `defaults read com.apple.finder ShowPathbar` के साथ एक वर्तमान सेटिंग पढ़ सकते हैं या `defaults write com.apple.finder ShowPathbar -bool TRUE` के साथ इसे बदल सकते हैं। यही कारण है कि इतने सारे macOS "पावर यूजर" कस्टमाइज़ेशन को सरल `defaults write` वन-लाइनर कमांड के रूप में साझा किया जाता है। कभी-कभी आपको अधिक शक्ति की आवश्यकता होती है। PlistEdit Pro (2025 तक Mac App Store पर लगभग $12) जैसे **थर्ड-पार्टी एडिटर** ऐसी सुविधाएँ जोड़ते हैं जिनकी Xcode में कमी है, जैसे साइड-बाय-साइड तुलना, रूपांतरण के बिना सीधा बाइनरी PLIST संपादन, और बैच संचालन। यदि आप प्रतिदिन PLISTs से जूझते हुए पाते हैं, तो एक समर्पित उपकरण एक स्मार्ट निवेश है। और एक साधारण **टेक्स्ट एडिटर** के बारे में क्या? यह XML PLISTs के लिए पूरी तरह से काम करता है, लेकिन यह बाइनरी वालों को दूषित कर देगा। यदि आप VS Code या BBEdit में एक बाइनरी फ़ाइल खोलते हैं, तो आपको इसे पहले `plutil -convert xml1` के साथ XML में कन्वर्ट करना होगा। संपादन के बाद, सिस्टम द्वारा इसका उपयोग करने से पहले इसे `plutil -convert binary1` के साथ वापस कन्वर्ट करें।

PLIST फ़ाइलें परिवर्तित करना: CocoConvert क्या कर सकता है और क्या नहीं कर सकता

CocoConvert को वेब पर लोगों द्वारा सामना किए जाने वाले सबसे आम PLIST रूपांतरण परिदृश्यों को संभालने के लिए बनाया गया है: XML PLISTs को JSON में परिवर्तित करना, JSON को XML PLIST में बदलना, और डेवलपर टूल की आवश्यकता के बिना बाइनरी PLIST फ़ाइलों को पठनीय XML में डीकोड करना। XML-से-JSON रूपांतरण के लिए, CocoConvert PLIST डेटा प्रकारों को उनके JSON समकक्षों में मैप करता है। स्ट्रिंग्स, पूर्णांक, arrays और डिक्शनरी आसानी से परिवर्तित होते हैं। बूलियन JSON `true` और `false` बन जाते हैं। तारीखों को मानक ISO 8601 स्ट्रिंग्स (उदाहरण के लिए, `2024-11-03T14:22:00Z`) में सीरियलाइज़ किया जाता है। `<data>` तत्वों से कोई भी बाइनरी डेटा आउटपुट में base64-एन्कोडेड होता है, जो सामग्री को पूरी तरह से संरक्षित करता है लेकिन इसका मतलब है कि JSON में वे विशिष्ट फ़ील्ड मानव-पठनीय नहीं होंगे। बाइनरी-से-XML सुविधा विशेष रूप से उपयोगी है। यदि आपने कभी किसी थर्ड-पार्टी टूल का उपयोग करके iPhone से प्राथमिकताओं का बैकअप निर्यात किया है, तो CocoConvert परिणामी `bplist` फ़ाइल को पार्स कर सकता है और एक पठनीय XML PLIST उत्पन्न कर सकता है, जिससे आप अपनी मशीन पर Xcode स्थापित किए बिना इसकी सामग्री का निरीक्षण कर सकते हैं। हमें यह भी स्पष्ट करना होगा कि CocoConvert क्या नहीं कर सकता है: यह PLIST फ़ाइलों को वापस बाइनरी फ़ॉर्मेट में परिवर्तित नहीं कर सकता है। एक बाइनरी PLIST उत्पन्न करने के लिए सटीक बाइट-स्तर ऑफ़सेट तालिकाओं का निर्माण करना आवश्यक है, एक ऐसा कार्य जो Apple की मूल लाइब्रेरीज़ के लिए सरल है लेकिन वेब सेवा में सही ढंग से लागू करना बहुत मुश्किल है। यदि आपको एक संशोधित बाइनरी PLIST को किसी डिवाइस पर वापस लिखना है—उदाहरण के लिए, संपादित iPhone प्राथमिकताओं को पुनर्स्थापित करने के लिए—तो आपको Mac पर `plutil` या PlistEdit Pro जैसे नेटिव एडिटर का उपयोग करना होगा। जबकि macOS अक्सर एक XML फ़ाइल को पढ़ सकता है जहाँ एक बाइनरी की उम्मीद की जाती है, कुछ ऐप्स सख्त होते हैं और XML संस्करण को अस्वीकार या अनदेखा कर देंगे। CocoConvert संरचना को मान्य करता है, सिमेंटिक्स को नहीं। एक खराब बंडल पहचानकर्ता या एक अमान्य OS संस्करण वाला PLIST ठीक से परिवर्तित हो जाएगा, क्योंकि फ़ाइल फ़ॉर्मेट के दृष्टिकोण से, यह मान्य है। ये एप्लिकेशन-स्तर की चिंताएँ हैं जिनका एक फ़ॉर्मेट कनवर्टर निदान नहीं कर सकता है।

सामान्य PLIST समस्याएँ और उनका निदान कैसे करें

PLIST भ्रष्टाचार दुर्लभ है, लेकिन यह एक विशिष्ट रूप से निराशाजनक macOS समस्या निवारण परिदृश्य है। लक्षण—एक ऐप जो लॉन्च नहीं होगा, प्राथमिकताएँ जो हर रीबूट पर रीसेट हो जाती हैं, एक सिस्टम सेवा जो चुपचाप विफल हो जाती है—शायद ही कभी सीधे किसी विशिष्ट फ़ाइल की ओर इशारा करते हैं। सबसे लगातार कारण **अनुचित लेखन से भ्रष्टाचार** है। यदि macOS क्रैश हो जाता है या बिजली खो देता है जबकि एक ऐप अपनी सेटिंग्स सहेज रहा होता है, तो डिस्क पर PLIST छोटा या गड़बड़ हो सकता है। आपका पहला नैदानिक ​​चरण `plutil -lint ~/Library/Preferences/com.example.app.plist` होना चाहिए। एक स्वस्थ फ़ाइल `OK` लौटाती है; एक दूषित फ़ाइल एक पार्स त्रुटि देती है, आमतौर पर एक सहायक लाइन नंबर या बाइट ऑफ़सेट के साथ। **अनुमति समस्याएँ** दूसरे स्थान पर हैं। एक उपयोगकर्ता के `~/Library/Preferences/` डायरेक्टरी में एक PLIST फ़ाइल जो किसी तरह `root` के स्वामित्व में है, हर एक लॉन्च पर एक ऐप को चुपचाप अपनी डिफ़ॉल्ट सेटिंग्स पर वापस गिरने का कारण बनेगी। `ls -l ~/Library/Preferences/com.example.app.plist` के साथ स्वामित्व की जाँच करें—मालिक आपका उपयोगकर्ता नाम होना चाहिए, `root` नहीं। आप इसे `sudo chown $(whoami) ~/Library/Preferences/com.example.app.plist` के साथ ठीक कर सकते हैं। एक और सूक्ष्म समस्या **कैश्ड प्राथमिकताएँ** हैं। तेज़ होने के लिए, macOS प्राथमिकता मानों को कैश करने के लिए एक पृष्ठभूमि डेमॉन, `cfprefsd` का उपयोग करता है। इसका मतलब है कि भले ही आप डिस्क पर एक PLIST फ़ाइल को सीधे संपादित करते हैं, चल रहा ऐप पुरानी, ​​कैश्ड संस्करण को पढ़ना जारी रख सकता है। यदि आपके `defaults write` परिवर्तन प्रभावी नहीं हो रहे हैं, तो इसका कारण लगभग निश्चित रूप से यही है। `killall cfprefsd` (यह स्वचालित रूप से पुनरारंभ होता है) के साथ कैश फ़्लश को मजबूर करें या बस लॉग आउट करें और वापस लॉग इन करें। Xcode बिल्ड विफलताएँ अक्सर एक खराब `Info.plist` का पता लगाती हैं। बिल्ड एक अस्पष्ट त्रुटि के साथ विफल हो जाएगा जैसे "The data couldn't be read because it isn't in the correct format," जो केवल Xcode का यह कहने का तरीका है कि फ़ाइल पार्स करने में विफल रही। इससे पहले कि आप कुछ और करें, XML में `<<<<<<<` जैसे मर्ज कॉन्फ्लिक्ट मार्कर की जाँच करें, या बस फ़ाइल पर `plutil -lint` चलाएँ। किसी भी PLIST के लिए जिसे आपने स्वयं नहीं बनाया है — किसी डिवाइस बैकअप, एक GitHub रेपो, या एक सहकर्मी से — पहले उस पर `plutil -lint` चलाएँ। इसमें तीन सेकंड लगते हैं और यह बहुत सारी भ्रम से बचाता है।

व्यापक Apple डेवलपमेंट वर्कफ़्लो में PLIST

केवल प्राथमिकताएँ संग्रहीत करने के अलावा, PLIST फ़ाइलें Apple की डेवलपमेंट टूलचेन में लोड-बियरिंग इंफ्रास्ट्रक्चर हैं, अक्सर उन तरीकों से जो केवल तभी स्पष्ट होते हैं जब कुछ टूट जाता है। एक ऐप का कोड साइनिंग एक एंटाइटेलमेंट PLIST पर निर्भर करता है। यह वह फ़ाइल है जो ठीक-ठीक घोषित करती है कि एक ऐप को कौन सी विशेष क्षमताओं का उपयोग करने की अनुमति है: iCloud, push notifications, App Groups, Keychain sharing, आदि। यह फ़ाइल बिल्ड के दौरान सीधे ऐप के कोड हस्ताक्षर में एम्बेडेड होती है। यदि एंटाइटेलमेंट PLIST प्रोविजनिंग प्रोफाइल से मेल नहीं खाता है, तो ऐप डिवाइस पर इंस्टॉल नहीं होगा। Apple का `codesign` टूल इस फ़ाइल को सीधे पढ़ता और मान्य करता है। Xcode का बिल्ड सिस्टम स्वयं PLISTs पर बहुत अधिक निर्भर करता है। `.xcodeproj/xcshareddata/xcschemes/` के अंदर पाई जाने वाली `*.xcscheme` फ़ाइलें PLISTs हैं जो बताती हैं कि किन लक्ष्यों को बनाना है, लॉन्च पर कौन से तर्क पास करने हैं, और कौन से पर्यावरण चर सेट करने हैं। क्योंकि वे केवल संरचित XML हैं, वे संस्करण नियंत्रण में कमिट करने के लिए सुरक्षित हैं और शाखाओं के बीच तुलना करना आसान है। यहां तक ​​कि App Store सबमिशन मेटाडेटा भी एक PLIST द्वारा प्रबंधित होता है। प्राइवेसी मैनिफेस्ट (`PrivacyInfo.xcprivacy`), जो Xcode 15 में पेश किया गया था और मई 2024 के बाद अधिकांश ऐप सबमिशन के लिए आवश्यक है, एक PLIST फ़ाइल है। यह घोषित करता है कि आपका ऐप किन APIs का उपयोग करता है जिनका संभावित रूप से फ़िंगरप्रिंटिंग के लिए उपयोग किया जा सकता है, और क्यों। इस फ़ाइल को गलत करने से बिल्ड त्रुटि नहीं होती है; यह App Store समीक्षा अस्वीकृति का कारण बनता है, जिसे डिबग करना काफी अधिक कष्टप्रद है। Apple के इकोसिस्टम के साथ इंटरैक्ट करने वाले क्रॉस-प्लेटफ़ॉर्म टूल—CI systems, MDM solutions, या बैकअप यूटिलिटीज—बनाने वाले किसी भी व्यक्ति के लिए, PLIST फ़ॉर्मेट की गहरी समझ अपरिहार्य है। फ़ॉर्मेट स्पेक Apple के `CFPropertyList` संदर्भ में प्रलेखित है, लेकिन बाइनरी फ़ॉर्मेट को भी पूरी तरह से रिवर्स-इंजीनियर किया गया है। Python, Ruby, Go, और Rust के लिए उत्कृष्ट ओपन-सोर्स पार्सर मौजूद हैं। Python की मानक लाइब्रेरी (3.4 के बाद से) में `plistlib` मॉड्यूल उत्पादन स्क्रिप्ट्स के लिए विशेष रूप से विश्वसनीय है जिन्हें डिवाइस बैकअप या Xcode प्रोजेक्ट फ़ाइलों को संसाधित करने की आवश्यकता होती है।