2010-12-01 10 views
22

मैं एक ऐसी स्क्रिप्ट लिखना चाहूंगा जो बंडल आइडेंटिफ़ायर या ऐप के Info.plist से संस्करण संख्या जैसे जानकारी पढ़ सके। एक्सकोड उस जानकारी को इसके पर्यावरण चर में नहीं देता है। क्या उन्हें sh/bash में लाने का कोई और तरीका है?शैल स्क्रिप्ट से प्लिस्ट जानकारी (बंडल आईडी) को कैसे पढ़ा जाए

उत्तर

40

defaults आदेश किसी भी plist फाइल करने के लिए/लिखने पढ़ सकते हैं, बस इसे एक रास्ता शून्य से .plist विस्तार दे:

$ defaults read /Applications/Preview.app/Contents/Info CFBundleIdentifier 

com.apple.Preview 

यह आवेदन बंडल के Info.plist फ़ाइल से सीधे CFBundleIdentifier मूल्य खींचती है।

डिफ़ॉल्ट भी बाइनरी plists के साथ किसी भी अतिरिक्त कदम के बिना काम करता है।

+3

यह बेहतर जवाब है (esp। चूंकि प्लिस्टबड्डी अब डिफ़ॉल्ट स्थापित नहीं है); आपको इसे चुनना चाहिए। – Olie

+13

यह भी ध्यान दें कि डिफ़ॉल्ट एक पूर्ण पथ चाहते हैं, न कि एक सापेक्ष पथ, भले ही आप वर्तमान में उस प्लिस्ट फ़ाइल के साथ निर्देशिका में हैं, जिसे आप पढ़ने की कोशिश कर रहे हैं। (अजीब!) – Olie

+6

तो, जब आप इसे किसी निर्देशिका के अंदर करते हैं, तो आप इसका उपयोग कर सकते हैं: डिफ़ॉल्ट $ PWD/SomeMyDirectory/Info.plist CFBundleIdentifier "com.apple.Preview" – iVader

4

आप सीधे निर्मित उत्पाद से फ़ाइल को पढ़ सकते हैं। हालांकि, अगर आप एडिटर में info.plist फ़ाइल को देखते हैं तो आप शैल चर स्वयं को देखेंगे। जैसे

com.yourcompany.${PRODUCT_NAME:rfc1034identifier} 

आप किसी भी खोल स्क्रिप्ट है कि Xcode चलाता में ${PRODUCT_NAME:rfc1034identifier} कॉल कर सकते हैं और यह पॉप्युलेट करना चाहिए: बंडल आईडी निम्नलिखित शेल कमांड है।

+0

यह अच्छा लगता है हालांकि मैंने इसका परीक्षण नहीं किया है। दोष यह है कि आप बंडल आईडी वापस नहीं लेते हैं, बल्कि इसका अंतिम भाग भी प्राप्त करते हैं, इसलिए आपको कहीं भी "com.mycompanyname" भाग को हार्डकोड करना होगा ... – Dimitris

3

मैक पर प्लसबड्डी नामक एक कमांड लाइन प्रोग्राम स्थापित है जो एक प्लेस्ट में मूल्यों को पढ़/लिख सकता है। अधिक जानकारी प्राप्त करने के लिए टर्मिनल में 'मैन प्लिस्टबड्डी' टाइप करें।

+0

मैंने प्लिस्टबड्डी की कोशिश की है और इसके साथ बहुत कुछ खेला है। समस्या यह है कि प्लिस्टबड्डी बंडल आईडी प्रिंट कर सकती है लेकिन इसे वापस नहीं कर सकती (यह केवल 0 या 1 लौटाती है)। तो एक खोल नोब होने के नाते मुझे एक चर को सौंपा गया कुछ परेशानी थी। हालांकि मैं इसे काम करने में कामयाब रहा। मैं अब अपना जवाब पोस्ट करूंगा। – Dimitris

33

PlistBuddy, एप्पल द्वारा एक ऐप्लिकेशन इसे इस तरह वर के स्ट्रिंग आवंटित करने के लिए संभव है का उपयोग करना:

#!/bin/sh 
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${BUILD_ROOT}/${INFOPLIST_PATH}") 

कहाँ BUILD_ROOT और INFOPLIST_PATH चर Xcode द्वारा स्थापित कर रहे हैं यदि आप एक "भागो स्क्रिप्ट" में इस स्क्रिप्ट को चलाने निर्माण चरण।

+1

प्लिस्टबड्डी हमेशा सिस्टम में मौजूद नहीं है। यदि आप स्क्रिप्ट वितरित करते हैं, तो आप डिफ़ॉल्ट का उपयोग करने पर विचार कर सकते हैं, क्योंकि अन्य उत्तरों की ओर इशारा किया गया है। –

संबंधित मुद्दे