2011-06-09 11 views
24

मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरे एक्सकोड 4 प्रोजेक्ट (विज्ञापन-प्रसार और रिलीज बिल्ड के लिए) में बंडल संस्करण संख्या में वृद्धि कैसे हो सकती है। मुझे कुछ स्क्रिप्ट ऑनलाइन मिलीं जो ऐसा करने के लिए बाध्य हैं लेकिन मुझे यकीन है कि उन्हें "प्री-एक्शन" या "पोस्ट-एक्शन" में रखना है या नहीं। मुझे यह भी यकीन नहीं है कि मुझे प्लिस्ट में क्या मूल्य रखना चाहिए; एक संख्या है कि स्क्रिप्ट फिर बदल जाएगा या एक चर?एक्सकोड 4 में बंडल संस्करण को स्वचालित रूप से कैसे बढ़ाया जाए?

मेरे द्वारा अब तक किए गए सभी विकल्पों को काम नहीं लगता है इसलिए किसी भी मदद की सराहना की जाएगी।

conf=${CONFIGURATION} 
arch=${ARCHS:0:4} 
# Only increase the build number on Device and AdHoc/AppStore build 
if [ $conf != "Debug" ] && [ $conf != "Release" ] && [ $arch != "i386" ] 
then 
buildPlist=${INFOPLIST_FILE} 
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBuildVersion" $buildPlist) 
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" $buildPlist) 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $buildNumber" $buildPlist 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildVersion.$buildNumber" $buildPlist 
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion.$buildNumber" $buildPlist 
fi 
+0

Xcode वातावरण चर Xcode4 में पूर्व/पोस्ट-क्रिया में उपलब्ध नहीं हैं (देखें http: //openradar.appspot .com/9111439 या http://openradar.appspot.com/9194286)। तो आप एक्सकोड का नवीनतम संस्करण स्थापित कर सकते हैं। – Learner

+0

क्षमा नहीं किया गया है कि प्री-एक्शन/पोस्ट-एक्शन बिल्ड सिस्टम का हिस्सा नहीं हैं। यदि आप बिल्ड निर्माण संख्या को हर बार एक नई बिल्ड प्रक्रिया को लात मारना चाहते हैं, तो पोस्ट-एक्शन से अपनी स्क्रिप्ट चलाएं। आप निम्न चरणों में भी देख सकते हैं (सबसे अच्छा यह एक कामकाज हो सकता है) 1. cmd +, 2. "व्यवहार" टैब का चयन करें 3. बाएं फलक 3.1 से "सफल बनाएं" आइटम का चयन करें।दाएं फलक से "रन" विकल्प पर जांचें और अपनी स्क्रिप्ट चुनें जो बिल्ड नंबर को बढ़ाएगी। इस बार बिल्ड बिल्ड बढ़ने पर संख्या बढ़ेगी। नोट: आपकी सभी एक्सकोड परियोजनाओं के लिए प्राथमिकताएं लागू होती हैं। – Learner

उत्तर

0

मैं पाया है कि स्तरीय xcconfigs का उपयोग कर इस समस्या को मदद करता है:

नीचे सबसे हाल ही में स्क्रिप्ट मैं उपयोग करने का प्रयास किया गया है।

ऐप्स, पुस्तकालयों और एसडीके के साथ जटिल निर्माण पर काम करना, आपको केवल प्रति परियोजना संख्या बनाने के लिए समन्वय करने में सक्षम होना चाहिए, लेकिन संख्या संगतता बनाएं।

आप एक निर्माण प्रबंधन शीर्षलेख बना सकते हैं जो प्रभावी रूप से एक पुनरावृत्ति संख्या (या संस्करण जानकारी यानी बीटा, देव, रिला) के साथ एक टेक्स्ट फ़ाइल है और इसे प्रति परियोजना xcconfig आयात श्रृंखला के माध्यम से आयात करें।

उस समय आप एक लक्ष्य निर्माण स्क्रिप्ट चरण प्राप्त कर सकते हैं जो आपकी बिल्ड/वर्जनिंग जानकारी को एम्बेड करेगा। यह आपके प्लेलिस्ट में होल्डिंग टेक्स्ट डालने और अपनी व्युत्पन्न फ़ाइल/निर्मित फ़ाइल अनुभागों पर प्लिस्टबड्डी चलाने से भी सबसे अच्छा किया जाता है। (इस प्रकार आपका स्रोत नियंत्रण परिवर्तन न्यूनतम है)

यदि आप एक बिल्ड निष्पादन स्क्रिप्ट लिख सकते हैं जो आवश्यक बिल्ड नंबर twiddling (या बेहतर अभी तक, बांस जैसी प्रणाली का उपयोग करें जो आपके लिए फ़ाइल बनाता है), तो आप रख सकते हैं जो आपके कोड से अलग है। अनुमोदित, अगर आपको इसे करने और ट्रैक रखने की आवश्यकता है, तो आपको इसे बढ़ने की अनुमति देने के लिए बदले गए बिल्ड नंबर में जांच करनी पड़ सकती है।

मैं 2.0.3 b34 (3473) की लाइन के साथ बिल्ड नंबर बनाए रखने के परिणामस्वरूप सक्षम हूं, जहां हमारे पास बिल्ड नंबर और एक एसवीएन चेकआउट बिल्ड पॉइंट है। ईमेल कि निर्माण शुरू कर दिया/विफल रहा है/आदि कॉपी किया परियोजना सर्वर के लिए किया परियोजना:

पूर्व/पोस्ट कार्यों उबेर सूचनाएं या प्रक्रियाओं के लिए अधिक कर रहे हैं (कृपया कोई Git यातना, मैं पुराने स्कूल हूँ)।

सब कुछ बिल्ड स्क्रिप्ट के रूप में बेहतर काम करता है।

:

आशा इस मदद करता है (और हमेशा की तरह। स्क्रिप्ट चरण एक बाहरी स्क्रिप्ट फ़ाइल फोन बनाने परियोजना में अपनी स्क्रिप्ट धक्का मत करो, यह स्रोत परियोजना फ़ाइल को नियंत्रित करने पर नरक है)।

10

1, सेट CFBundleVersion जेफ लेमार्क द्वारा Xcodefrom iPhone विकास में बनाता है के लिए xxx

1

2, निर्माण चरणों खोल स्क्रिप्ट autoVersion चलाने के लिए जोड़ें।श

2

3, autoVersion.sh

#!/bin/sh 
# Auto Increment Version Script 
# set CFBundleVersion to 1.0.1 first!!! 
# the perl regex splits out the last part of a build number (ie: 1.1.1) and increments it by one 
# if you have a build number that is more than 3 components, add a '\.\d+' into the first part of the regex. 
buildPlist=${INFOPLIST_FILE} 
newVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$buildPlist" | /usr/bin/perl -pe 's/(\d+\.\d+\.)(\d+)/$1.($2+1)/eg'` 
#echo $newVersion; 
/usr/libexec/PListBuddy -c "Set :CFBundleVersion $newVersion" "$buildPlist" 

4 नामित स्क्रिप्ट नीचे बचाने के लिए, चलाने के खोल: सीपी autoVersion.sh ~/दस्तावेज़/और chmod 777 ~/दस्तावेज़/autoVersion.sh

5, & का आनंद लें इसका आनंद लें। :)

पर्ल कोड से: https://gist.github.com/1436598

+2

अच्छा उपयोगिता के लिए धन्यवाद! , आप वास्तव में इसे प्रोजेक्ट की रूट में डाल सकते हैं और खोल/बिन/sh के साथ, इसे "$ SRCROOT/autoversion.sh" (उद्धरण के साथ) के रूप में कॉल करें, इसलिए परियोजना पोर्टेबल है – PetrV

1

संस्करण एक कमांड लाइन का निर्माण स्क्रिप्ट (शायद निरंतर एकीकरण के लिए) में incrementing को एकीकृत करने के लिए इच्छुक किसी को भी, निम्न कमांड देखें:

# cd into the project folder containing the plist 
    cd /Users/waitea/iOS/E.ON/iOS/trunk/Eon 

    # grab the version numbers 
    major_version=$(grep -C 2 CFBundleVersion App-Info.plist | grep -o '[0-9]\+.[0-9]\+.[0-9]\+') 
    major_version_min=$(echo $major_version | grep -o '[0-9]\+.[0-9]\+\.') 
    minor_version=$(echo $major_version | grep -o '[0-9]\+$') 

    # increment the minor version 
    increment=`expr $minor_version + 1` 
    incremented_whole_version="$major_version_min$increment" 

    # replace the build number in the plist using perl 
    /usr/bin/perl -p -i -e "s/$major_version/$incremented_whole_version/g" App-Info.plist 

कि तब बढ़ेगी एक xxx शैली संस्करण संख्या में सही संख्या। अपने सम्मेलन के लिए बदलने के लिए reg-ex की चिल्लाओ।

मुझे थोड़ी देर लग गई तो मैंने सोचा कि मैं समुदाय को वापस देने के लिए साझा करूंगा!

संपादित करें - मैं एक सतत एकीकरण प्रणाली है कि आप

https://github.com/adamwaite/XcodeProject

1

यह आपकी मदद कर सकते के लिए यह करूँगा बनाया। मैं इसे अपनी परियोजनाओं में उपयोग कर रहा हूं। https://gist.github.com/alokc83/5207294

#!/bin/sh 
# xcode-build-number-generator.sh 
# @desc Automaticvally create build number every time using curent day, month and year 
# @usage 
# 1. Select: your Target in Xcode 
# 2. Select: Build Phases Tab 
# 3. Select: Add Build Phase -> Add Run Script 
# 4. Paste code below in to new "Run Script" section 
# 5. Drag the "Run Script" below "Link Binaries With Libraries" 


#Credits 
# [email protected] for intial direction about automatic versioning 
# http://www.codinghorror.com/blog/2007/02/whats-in-a-version-number-anyway.html (For unferstanding the Software Versoining) 
#Feel free to leave comment or report issues 


MONTH=`date | awk '{print $2}'` 

case "$MONTH" in 
    'Jan') 
     MONTHNUMBER=1 
    ;; 
    'Feb') 
     MONTHNUMBER=2 
    ;; 
    'Mar') 
    MONTHNUMBER=3 
    echo "Month is $MONTHNUMBER" 
    ;; 
    'Apr') 
     MONTHNUMBER=4 
    ;; 
    'May') 
     MONTHNUMBER=5 
     ;; 
    'Jun') 
     MONTHNUMBER=6 
     ;; 
    'Jul') 
     MONTHNUMBER=7 
     ;; 
    'Aug') 
     MONTHNUMBER=8 
     ;; 
    'Sep') 
     MONTHNUMBER=9 
     ;; 
    'Oct') 
     MONTHNUMBER=10 
     ;; 
    'Nov') 
     MONTHNUMBER=11 
     ;; 
    'Dec') 
     MONTHNUMBER=12 
     ;; 
esac 

DATE=`date | awk '{print $3}'` 
echo "Date = $DATE" 
YEAR=`date | awk '{print $6}'` 
echo "Date = $YEAR" 

### only uncomment section below if testing the format in terminal 
#echo "BuildNumber1 = $MONTH$DATE$YEAR" 
#echo "or BUILD NUMBER = $DATE$MONTH$YEAR" 
#echo "or BUILD NUMBER = $MONTHNUMBER$DATE$YEAR Format is |Month Number Date Year|" 
#echo "or BUILD NUMBER = $DATE$MONTHNUMBER$YEAR format is |Date MonthNumber Year|" 
############################ 

#### Uncomment only one one style or last one will be in effect 
#buildNumber=$MONTH$DATE$YEAR 
#buildNumber=$DATE$MONTH$YEAR 
buildNumber=$MONTHNUMBER$DATE$YEAR 
#buildNumber=$DATE$MONTHNUMBER$YEAR 


echo "Final Build number is $buildNumber" 
## Below command write buildNumber in the property list 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" 
4

एलिक्स के जवाब के रूप में एक ही विचार है, लेकिन बहुत सरल:

buildNumber=`/bin/date +%Y%m%d%H%M%S` 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

अपने Target पर एक Run Script आइटम के रूप में इस जोड़े Build Phases पर। इसका monotonically increasing होने का लाभ भी है।

0

एफडब्ल्यूआईडब्लू - यह वही है जो मैं वर्तमान में निर्माण संख्या बढ़ाने के लिए उपयोग कर रहा हूं केवल रिलीज के लिए (जिसमें संग्रह शामिल है)। एक्सकोड 5.1 के तहत ठीक काम करता है।

buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH") 

if [ "$CONFIGURATION" = "Release" ]; then 
buildnum=$((buildnum + 1)) 
echo "Build number updated to $buildnum" 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH" 
fi; 
0

आप की तरह एक संस्करण प्रणाली का उपयोग कर रहे हैं तो "x.x.x" क्या आप इस रन स्क्रिप्ट जोड़ सकते हैं:

बस/सीधे एक स्क्रिप्ट चलाएं निर्माण चरण में टुकड़ा चिपकाने Xcode में कॉपी। यह संस्करण संख्या (xxx +1) हर बार एक नए निर्माण किया जाता है में वृद्धि होगी:

if [ "${CONFIGURATION}" != "Debug" ]; then 

VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") 

NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $4}'` 

NEWSUBVERSION=$(($NEWSUBVERSION + 1)) 

NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 "." $3 ".'$NEWSUBVERSION'" }'` 

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

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