2011-10-30 11 views
15

अंत में ... कुछ वर्षों के बाद और भाग लेने के एक महीने के बाद, मुझे आपके पास लोगों से एक प्रश्न पूछने का मौका मिला है।जानकारी के लिए एक्सकोड कैसे प्राप्त करें Info.plist फ़ाइल

मेरा मालिक मुझे बिल्ड नंबर बढ़ाने के लिए (या किसी भी प्रक्रिया) पर भरोसा नहीं करता है, वह भी ऐप में बेक किया गया & बिल्ड बनाना चाहता है। मैं इसे सामान्य Info.plist फ़ाइल में रखना चाहता हूं।

मैं इस संबंधित सवाल पाया:

Build information in iOS Application (date/time app was built)

और वहाँ उत्तरों के आधार पर, मैं योजना संपादक में चला गया और चरण बिल्ड की "पोस्ट-एक्शन" अनुभाग के नीचे स्क्रिप्ट कहा:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    defaults write "${infoplist%.plist}" BuildDate "${builddate}" 
fi 

XCode में, मेरा योजना संपादक विंडो इस तरह दिखता है:

दुर्भाग्यवश, BuildDate को Info.plist में कभी भी लिखा नहीं जाता है।

"$ {builddate}" को "$ builddate" में बदलना या तो काम नहीं करता है। मैंने इस लाइन को स्क्रिप्ट में जोड़ा:

echo "build date is $builddate" > /tmp/result.txt 

और दिनांक लिखित फाइल में पूरी तरह से ठीक दिखाई दिया। उपरोक्त स्क्रिप्ट से Info.plist फ़ाइल में स्ट्रिंग्स लिखना पूरी तरह ठीक है, काफी परेशान है।

तो, संक्षेप में, Info.plist फ़ाइल में जोड़ने की तिथि कैसे प्राप्त करें?

+0

मैं उपयोग कर किसी भी समस्या नहीं थी अपने एक पोस्ट एक्शन के रूप में स्क्रिप्ट, सिवाय इसके कि यह हस्ताक्षर को आच्छादित करता है। एक पोस्ट-एक्शन के बजाए बिल्ड-चरण के रूप में ठीक काम करने लगता है, जिसमें काम करने का लाभ भी है या नहीं, आप वर्कस्पेस साझा करते हैं या नहीं। यह प्री-एक्शन से भी बेहतर काम करता है क्योंकि प्री-एक्शन वास्तविक जानकारी में बदलाव से ब्लिट्ज हो जाएगा। प्लिस्ट जो बिल्ड-टाइम ओवरराइट करता है। – smparkes

उत्तर

4

माइकल के उत्तर में कोड गलत है या अब तक अद्यतित नहीं है। नीचे दिया गया संस्करण सेट सिंटैक्स में एक त्रुटि को हल करता है और उनमें रिक्त स्थान के साथ बिल्ड पथ का भी समर्थन करता है।

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

नोट: यह परिवर्तन किसी संपादन के रूप में प्रस्तुत किया गया था लेकिन अस्वीकार कर दिया गया है और मैं अभी तक अपने जवाब पर एक टिप्पणी पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है ...

2

मैं आपके सटीक कोड का उपयोग कर रहा हूं, लेकिन पोस्ट-एक्शन के बजाय प्री-एक्शन के भीतर, और निर्मित उत्पाद के भीतर info.plist सही ढंग से बिल्ड तिथि की रिपोर्ट करता है। दूसरे शब्दों में, आपको अपनी जानकारी को अनुकूलित करना होगा। से पहले इसे निर्मित उत्पाद में कॉपी करना, जो मुझे उचित लगता है।

वैसे, सुझाव के लिए धन्यवाद, यह बहुत चालाक और उपयोगी है।

+0

यदि आप इसे प्री-एक्शन में करते हैं और फिर वास्तव में info.plist को अपडेट करते हैं, तो आपके परिवर्तन अपडेट में ब्लिट्ज हो जाएंगे। इससे कोई फर्क नहीं पड़ता, क्योंकि info.plist को इतना अपडेट नहीं किया जाता है। – smparkes

5

Ahhhh, मैं (2 घंटे मैं पहले से ही बर्बाद किया था की चोटी पर) और 30 मिनट खर्च किया जाना चाहिए था और अपना पोस्ट करने से पहले इस सवाल के जवाब को देखा:

Insert Subversion revision number in Xcode

यह बाद कार्रवाई स्क्रिप्ट काम कर देता है और मेरे लिए काम करता है:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

आप देख सकते हैं, यह एक हैक का एक सा कर रहा है (इसे जोड़ने अगर यह मौजूद नहीं है, यह सही बाद में की स्थापना)।

यदि कोई ऊपर "डिफ़ॉल्ट लिखने" विधि का उपयोग करके समाधान का सुझाव दे सकता है (जो मुझे लगता है कि "प्लिस्टबड्डी" से बेहतर समर्थन किया जा सकता है), तो मुझे पता लगाने के लिए रोमांचित होगा (और निश्चित रूप से मैं स्वीकार करूंगा और उपयोग करूंगा वह बेहतर जवाब भी)।

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