दिलचस्प पोस्ट
समग्र प्राथमिक कुंजी या नहीं? सर्वश्रेष्ठ .net मेमोरी और प्रदर्शन प्रोफाइलर? MySQL में ओरेकल के रोविइड के समतुल्य सी # के एक foreach में चर के पुन: उपयोग के लिए एक कारण है? आर में एक साथ दो हिस्टोग्राम कैसे छापें? OpenMP प्रोग्राम क्रमिक एक से धीमी है एंड्रॉइड में कस्टम डायलॉग बॉक्स कैसे बनाएं? मैं Firebase पर एक कस्टम उपडोमेन कैसे बना सकता हूं? ओवरलोडिंग नया / हटाएं PHP से C / C ++ लाइब्रेरी फ़ंक्शन कॉल करना ऑब्जेक्ट ओरिएंटेड प्रतिमान में ढीले युग्मन और तंग युग्मन के बीच अंतर क्या है? क्या यह एक पुनरावर्ती SQL क्वेरी बनाना संभव है? विंडोज संदेशों को संभालने के बिना फाइल को छोड़ने के लिए मैं एक फॉर्म को कैसे स्वीकार करूं? एक विशिष्ट एप्लिकेशन का एक स्क्रीनशॉट प्राप्त करें संदेश पंप चलने वाले एसटीए थ्रेड में संदेश कैसे पोस्ट करें?

बिल्ड नंबर बढ़ाने का बेहतर तरीका?

मैं अपनी एक्सकोड बिल्ड प्रोसेस के भाग के रूप में एक प्लास्ट फाइल के भीतर बिल्ड नंबर को बढ़ाने के लिए एक शेल स्क्रिप्ट का उपयोग कर रहा हूं, हालांकि यह अक्सर Xcode 4.2.1 दुर्घटना कर रहा है (एक परियोजना से संबंधित लक्ष्य के बारे में एक त्रुटि के साथ; मैं अनुमान लगा रहा हूं plist फ़ाइल बदलना किसी तरह से भ्रामक Xcode है)।

शेल स्क्रिप्ट ने ऐसा इसलिए किया था कि बिल्ड नंबर केवल agvtool द्वारा agvtool जब कोई फ़ाइल agvtool फ़ाइल से नया होता है (ऐसा इसलिए कि बिल्डिंग ने मूल्य agvtool नहीं है):

 if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi 

क्या बिल्ड नंबर बढ़ने का कोई तरीका है ( प्लास्टर फाइल में, या कहीं और) जो कि Xcode को नहीं तोड़ता है?

संपादित करें : @Monolo के सुझाव के आधार पर यहां मेरा अंतिम समाधान है मैंने ${PROJECT_DIR}/tools ( .xcodeproj निर्देशिका में भाई ${PROJECT_DIR}/tools में निम्नलिखित स्क्रिप्ट बनाई है:

 #!/bin/sh if [ $# -ne 1 ]; then echo usage: $0 plist-file exit 1 fi plist="$1" dir="$(dirname "$plist")" # Only increment the build number if source files have changed if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist") if [ -z "$buildnum" ]; then echo "No build number in $plist" exit 2 fi buildnum=$(expr $buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist" echo "Incremented build number to $buildnum" else echo "Not incrementing build number as source files have not changed" fi 

2 संपादित करें : मैंने @ मिलिवेज सुझाव को शामिल करने के लिए स्क्रिप्ट को संशोधित किया है।

मैंने तब Xcode लक्ष्य 'बिल्ड चरणों' खंड से स्क्रिप्ट को शामिल किया: Xcode निर्माण चरणों स्क्रीनशॉट

3 संपादित करें : @ मासीमोबियो के उत्तर के अनुसार, यदि आपको रिक्त स्थान शामिल है, तो आपको प्लिस्ट तर्क के चारों ओर उद्धरण जोड़ना होगा।

4 संपादित करें : बस यह अपडेट करने के लिए कि इस बिल्ड स्क्रिप्ट को लागू करने की मेरी पसंदीदा विधि अब एक अलग लक्ष्य बनाने के लिए है और एप लक्ष्य को इस बिल्ड बिल्ड नंबर लक्ष्य पर निर्भर करता है। यह सुनिश्चित करता है कि यह ऐप्लीकेशन लक्ष्य से पहले कुछ भी होता है , जिसे मैंने देखा है (मुझे लगता है कि यह बिल्ड की शुरुआत में प्लास्ट की प्रक्रिया करना पसंद करता है)। मैं एक विशुद्ध रूप से अजगर-आधारित समाधान के लिए भी स्विच कर चुका हूं जो एक अलग फ़ाइल में संस्करण संख्या रखता है, और संस्करण स्रोत फाइलें लिखती है, क्योंकि यह क्रॉस-प्लेटफॉर्म उत्पादों के लिए अधिक उपयोगी है (अर्थात विंडोज के अंतर्गत विज़ुअल स्टूडियो स्क्रिप्ट का उपयोग कर सकता है, और जाहिर cmake / make-type builds भी ऐसा कर सकते हैं)। इसका लाभ यह है कि अलग-अलग प्लेटफार्मों के तहत बिल्ड नंबर हमेशा समान होता है, और वर्तमान संस्करण / बिल्ड के साथ भी विजुअल स्टूडियो Resource.rc फ़ाइल को अपडेट करना संभव है।

ये अजगर स्क्रिप्ट है जो मैं वर्तमान में Xcode प्रोजेक्ट में Info.plist फ़ाइलों को अपडेट करने के लिए उपयोग कर रहा हूं।

वेब के समाधान से एकत्रित समाधान "बिल्ड नंबर बढ़ाने का बेहतर तरीका?"

अगर मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप Project-Info.plist फ़ाइल को संशोधित करना चाहते हैं, जो कि Xcode के मानक प्रोजेक्ट टेम्पलेट का हिस्सा है?

मैं यह पूछने का कारण यह है कि Project-Info.plist सामान्यतः संस्करण नियंत्रण के अधीन है, और इसे संशोधित करने का मतलब है कि इसे ठीक से संशोधित किया जाएगा।

अगर यह आपके साथ ठीक है, तो निम्नलिखित स्निपेट बिल्ड नंबर को अपडेट करेगा और इस प्रक्रिया में संशोधन के रूप में फ़ाइल को चिह्नित करेगा, जहां get_build_number कुछ संभव है (संभावित रूप से वृद्धि हुई) बिल्ड संख्या प्राप्त करने के लिए जिसे आप उपयोग करना चाहते हैं:

 #!/bin/sh # get_build_number is a placeholder for your script to get the latest build number build_number = `get_build_number` /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist 

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

आपके बारे में फलक और अन्य स्थानों में संस्करण दिखाने की आवश्यकता के अनुसार, आप CFBundleGetInfoString और CFBundleShortVersionString सेटिंग को भी देख सकते हैं।

मैंने इस सवाल पर बहुत सारे जवाबों के साथ गड़बड़ी की है, और उनमें से कोई भी मुझे संतुष्ट नहीं करता हालांकि, मैं अंत में एक मिश्रण है कि मैं वास्तव में पसंद के साथ आया था!

दो चरण हैं, शुरुआत में एक और आपके बिल्ड चरणों के अंत में एक है।

शुरू में:

 # Set the build number to the count of Git commits buildNumber=$(git rev-list HEAD | wc -l | tr -d ' ') /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

अतं मै:

 # Set the build number to "DEVELOPMENT" /usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

Xcode में Info.plist को देखते हुए आपको संस्करण संख्या "विकास" दिखाई देगी, लेकिन निर्मित ऐप में लगातार बढ़ती संख्या का नंबर होगा। (जब तक आप हमेशा ऐसा करते हैं, वही शाखा बंद हो जाती है।)

अंत में एक निरंतर स्ट्रिंग पर वापस संस्करण संख्या सेट करना ऐप के निर्माण द्वारा Info.plist फ़ाइल परिवर्तित होने से रोकता है।

मुझे यह तरीका क्यों पसंद है:

  • आसान
  • गिट संस्करण इतिहास दूषित नहीं करता है
  • CFBundleVersion पूरी तरह से स्वचालित है
  • जब भी मैं चाहता हूं सुंदर संस्करण संख्या को संशोधित किया जा सकता है

मैंने इस भयानक चमक का प्रयोग किया है और उम्मीद के मुताबिक काम करता है https://gist.github.com/sekati/3172554 (सभी क्रेडिट मूल लेखक को जाता है)

मैं समय पर संशोधित सिक्टिप्स

xcode- विजन स्ट्रिंग- गेनरेटर.श ,

xcode-build-number-generator.sh

जैसा कि ये सार देव समुदाय की मदद कर रहे हैं मैंने गिटब प्रोजेक्ट को इसके बारे में सोचा था। तो यह अच्छा विकसित करने देता है यहां गिथूब प्रोजेक्ट है: https://github.com/alokc83/Xcode-build-and-version-generator

मैंने दोनों स्क्रिप्ट के लिए कोड को थोड़ा सुधार के लिए अद्यतन किया है। नीचे का उपयोग करने के बजाय गिटौब से नवीनतम प्राप्त करें

संस्करण के लिए:

 # xcode-version-bump.sh # @desc Auto-increment the version number (only) when a project is archived for export. # @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. Check the checkbox "Run script only when installing" # 6. Drag the "Run Script" below "Link Binaries With Libraries" # 7. Insure your starting version number is in SemVer format (eg 1.0.0) # This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position. VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}") NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'` NEWSUBVERSION=$(($NEWSUBVERSION + 1)) NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'` /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

निर्माण के लिए:

 # xcode-build-bump.sh # @desc Auto-increment the build number every time the project is run. # @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" # 6. Insure that your starting build number is set to a whole integer and not a float (eg 1, not 1.0) buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

यह पूरी प्रविष्टि बेहद मददगार थी। मैंने इस चाल का इस्तेमाल किया लेकिन मेरी स्क्रिप्ट जीआईटी में पोस्ट-कट हुक के रूप में स्थापित की, इसलिए सीएफ़बंडलेविर्सन हर सफल प्रतिबद्धता के बाद बढ़ता गया है। हुक स्क्रिप्ट / गीक्स / हुक में चला जाता है। परियोजना निर्देशिका में एक लॉग छोड़ा गया है

यह मेरे सबसे बुनियादी मानदंड को पूरा करता है मैं जीआईटी से एक संस्करण खींचने में सक्षम होना चाहता हूं और मैं पहले से सटीक निर्माण के पुनर्निर्माण करना चाहता हूं। निर्माण प्रक्रिया के दौरान किया गया कोई भी वेतन वृद्धि ऐसा नहीं करता है।

ये मेरी स्क्रिप्ट है:

 #!/bin/sh # # post-commit # # This script increments the CFBundleVersion for each successful commit # plist="./XYZZY/XYZZY-Info.plist" buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist") if [ -z "$buildnum" ]; then exit 1 fi buildnumplus=$(expr $buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnumplus" "$plist" echo $(date) "- Incremented CFBundleVersion to" $buildnumplus >> hookLog.txt 

एफडब्ल्यूआईडब्ल्यू – यह वह है जो मैं अभी रिलीज बिल्ड के लिए बिल्ड नंबर को बढ़ाने के लिए उपयोग कर रहा हूं (जिसमें संग्रह शामिल है) Xcode 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; 

मुझे नहीं पता है कि सबसे अच्छा कौन सा तरीका है, लेकिन मैं एप्पल के उत्तर को तब पोस्ट करूंगा जब किसी को इसके लिए खोज हो।

इस ऐप्पल के क्यू एंड ए पोस्ट के अनुसार :

एग्रेटोल का प्रयोग करके स्वचालित संस्करण और बिल्ड नंबर

संस्करण और बिल्ड नंबर कुंजी क्रमशः आपके आवेदन के विपणन और आंतरिक संस्करणों को निर्दिष्ट करते हैं। एग्वॉल्ट एक कमांड लाइन टूल है जो आपको इन नंबरों को अगले उच्चतम संख्या या किसी विशिष्ट नंबर पर स्वचालित रूप से वृद्धि करने की अनुमति देता है।

बिल्ड नंबर आपके आवेदन का एक अप्रकाशित या जारी संस्करण की पहचान करता है। इसे आपके एप्लिकेशन के Info.plist में CFBundleVersion (बंडल संस्करण) के रूप में संग्रहीत किया जाता है।

आपको अपने Xcode प्रोजेक्ट में निम्न चरणों को पूरा करना होगा:

  1. Agvtool सक्षम करें

अपने लक्ष्य के बिल्ड सेटिंग्स फलक पर नेविगेट करें, फिर इसे अपने सभी बिल्ड कॉन्फ़िगरेशन के लिए निम्नानुसार अपडेट करें:

  • वर्तमान चुनौती के मूल्य के लिए वर्तमान प्रोजेक्ट संस्करण सेट करें

आपकी Xcode प्रोजेक्ट डेटा फ़ाइल, project.pbxproj, में शामिल है एक CURRENT_PROJECT_VERSION (वर्तमान प्रोजेक्ट वर्शन) बिल्डिंग सेटिंग, जो आपके प्रोजेक्ट के वर्तमान संस्करण को निर्दिष्ट करता है। एग्रेटोल खोज CURRENT_PROJECT_VERSION लिए project.pbxproj यदि CURRENT_PROJECT_VERSION मौजूद है और चल रहा है, तो यह चल रहा है अन्यथा। इसका मान बिल्ड नंबर को अपडेट करने के लिए उपयोग किया जाता है

  • सेट अप करने के लिए ऐप्पल जेनेरिक सिस्टम

डिफ़ॉल्ट रूप से, Xcode किसी भी संस्करण प्रणाली का उपयोग नहीं करता है। एपेल जेनेरिक के लिए वर्जनिंग सिस्टम सेट करना यह सुनिश्चित करता है कि Xcode में आपके प्रोजेक्ट में सभी एगेटोल-जनरेटेड वर्जन की जानकारी शामिल होगी।

सेट अप करने के लिए ऐप्पल जेनेरिक सिस्टम

  1. अपने संस्करण को सेट करें और नंबरों को बनाएं

एग्रेटोल आपके संस्करण की जानकारी और अपने नंबर के निर्माण के लिए जानकारी। यदि वे मौजूद हैं और कुछ नहीं करता है तो यह उन्हें अपडेट करता है, अन्यथा सुनिश्चित करें कि CFBundleVersion (बंडल संस्करण) और CFBundleShortVersionString (बंडल संस्करण स्ट्रिंग, शॉर्ट) कुंजी आपकी जानकारी में मौजूद हैं। जैसा कि नीचे दी गई छवि में देखा गया है।

अपने संस्करण को सेट करें और नंबरों को बनाएं

Xcode से बाहर निकलें, फिर निम्न में से किसी भी कमांड को चलाने से पहले टर्मिनल एप्लिकेशन में .xcodeproj प्रोजेक्ट फ़ाइल वाली निर्देशिका पर जाएं। .xcodeproj परियोजना फ़ाइल में project.pbxproj है, जो कि एग्वोटोल द्वारा उपयोग किया जाता है। (यह वह हिस्सा है जिसे आप कमांड लाइन के बजाए एक स्क्रिप्ट में चला सकते हैं।)

संस्करण संख्या को अद्यतन करना

किसी विशिष्ट संस्करण में संस्करण संख्या को अपडेट करने के लिए, चलाएं

 xcrun agvtool new-marketing-version <your_specific_version> 

पूर्व: संस्करण संख्या को 2.0 में अपडेट करें

 xcrun agvtool new-marketing-version 2.0 

बिल्ड नंबर को अपडेट करना

अपने बिल्ड नंबर को स्वचालित रूप से बढ़ाना, चलाएं

 xcrun agvtool next-version -all 

किसी विशेष संस्करण के लिए अपने एप्लिकेशन की बिल्ड संख्या सेट करने के लिए, चलाएं

 xcrun agvtool new-version -all <your_specific_version> 

पूर्व: 2.6.9 पर बिल्ड नंबर सेट करें

 xcrun agvtool new-version -all 2.6.9 

बोनस:

वर्तमान संस्करण संख्या देखने के लिए, चलाएं

 xcrun agvtool what-marketing-version 

वर्तमान बिल्ड नंबर देखने के लिए, चलाएं

 xcrun agvtool what-version 

स्क्रिप्ट के लिए धन्यवाद यह महान काम करता है

मेरी Info.plist रिक्त स्थान वाले एक नाम के साथ एक उपनिर्देशिका में है, इसलिए मुझे प्लास्ट पथ के आसपास उद्धरण चिह्नों के साथ रन स्क्रिप्ट को संशोधित करना पड़ा:

 ${PROJECT_DIR}/tools/bump_build_number.sh "${PROJECT_DIR}/${INFOPLIST_FILE}" 

और सभी रास्ते के आसपास उद्धरण चिह्नों के साथ उसी प्रकार से खोल स्क्रिप्ट:

 #!/bin/sh if [ $# -ne 1 ]; then echo usage: $0 plist-file exit 1 fi plist=$1 dir=$(dirname "$plist") # Only increment the build number if source files have changed if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$plist") if [ -z "$buildnum" ]; then echo "No build number in $plist" exit 2 fi buildnum=$(expr $buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist" echo "Incremented build number to $buildnum" else echo "Not incrementing build number as source files have not changed" fi 

मैं ऑटोरेविजन के उपयोग की सिफारिश करेगा

Xcode एक हेडर फ़ाइल (जो कि निर्माण समय पर स्वत: उत्पन्न हो सकता है और vcs में स्वयं नहीं) के लिए मूल्य प्रदान करने के लिए अनुमति देता है जो जानकारी के समय में विस्तारित हो जाएगा। आप ऑटोरिवेंसी वेबसाइट पर इसे स्थापित करने के लिए एक चहलकदमी पा सकते हैं।

ऑटोरेविज़न के पास इन प्रकारों की हेडर फाइलों के लिए सटीक इन स्थितियों में मदद करने के लिए एक आउटपुट प्रकार है

मैं वर्तमान में उपयोग कर रहा हूँ स्क्रिप्ट बहुत ऊपर, Alix पर आधारित है ऊपर। मेरा अनुकूलन, नीचे, एक रिलीज / संग्रह निर्माण पर स्वत:-वेतन वृद्धि करने के लिए एक जांच जोड़ता है

उस बदलाव के बिना संस्करण नियंत्रण संघर्ष होंगे क्योंकि प्रत्येक डेवलपर बिल्ड नंबर को अपने दम पर बढ़ाना होगा। और तथ्य यह है कि जीआईटी का इतिहास हर समय निर्माण संख्या के साथ अनावश्यक रूप से प्रदूषित होगा।

 # xcode-build-bump.sh # @desc Auto-increment Xcode target build number every time the project is archived # @src stackoverflow.com/a/15483906 # @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" # 6. Insure that your starting build number is set to a whole integer and not a float (eg 1, not 1.0) if [ "Release" != "${CONFIGURATION}" ] then exit 0 fi buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

यह GitHub सार के रूप में भी उपलब्ध है (थोड़ी आसान कॉपी और पेस्ट प्रारूप में)

इनमें से कुछ समाधान के साथ एक मुद्दा यह है कि लॉन्च सर्विसेज केवल बंडल संस्करण में चार पांच प्रमुख अंकों को पहचानती है । मेरे पास एक बिल्ड नंबर वाला एक प्रोजेक्ट है जो कि हजारों में है, इसलिए मैं कुछ कम महत्वपूर्ण अंकों का उपयोग करना चाहता था।

यह पर्ल स्क्रिप्ट प्रोजेक्ट में सभी Info.plists को बढ़ाता है, न कि केवल वर्तमान लक्ष्य के लिए, इसलिए बिल्ड नंबर सभी लॉकस्टेप में रहते हैं। यह एक पैच अंक और दो छोटे अंकों का भी उपयोग करता है, इसलिए 1234 का निर्माण संस्करण 1.23.4 दिया गया है। मैं इसे पूर्व-निर्मित व्यवहार के रूप में उपयोग करता हूं, इसलिए यह उन सभी परियोजनाओं पर लागू होता है जो मैं निर्माण करता हूं

स्क्रिप्ट सुंदर जानवर बल है, लेकिन यह मेरे लिए काम करता है

 #!/usr/bin/perl use strict; use warnings; use v5.12.0; use Dir::Iterate; for my $plist_file(grepdir { /-Info.plist$/ } '.') { my $build = `/usr/libexec/PlistBuddy -c "Print CFBundleVersion" '$plist_file'`; chomp $build; next unless $build; # Strip dots $build =~ s/\.//g; $build =~ s/^0//g; # Increment $build++; # Re-insert dots $build =~ s/^(\d{0,4}?) (\d{0,2}?) (\d{0,1}?)$/$1.$2.$3/x; # Insert zeroes $build =~ s{(^|\.)\.}{${1}0.}g; system qq(/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" '$plist_file'); } 

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

इसके लिए, मैंने अपनी पहली स्क्रिप्ट निम्न में संशोधित की:

 # Set the build number to the decimal conversion of the short version of the current git SHA # Get the short version of the current git SHA in hexadecimal SHA=$(git rev-parse --short @) # Uppercase any alphabetic chars in SHA (bc doesn't like lowercase hex numbers) UPPERCASE_SHA=$(tr '[:lower:]' '[:upper:]' <<< "$SHA") # Use bc to convert the uppercase SHA from hex to decimal BUILD_NUM=$(bc <<< "ibase=16;obase=A;$UPPERCASE_SHA") # Set our build number to that /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUM" "${PROJECT_DIR}/${INFOPLIST_FILE}" # To convert a build number back to a usable git SHA, run the following, substituting the build number for <build number> # bc <<< "ibase=10;obase=16;<build number>" 

यह वर्तमान गीटक एसएचए के संक्षिप्त संस्करण को दशमलव में परिवर्तित करता है। हेक्साडेसिमल वर्ण ऐप्पल की बिल्ड संख्या आवश्यकताओं के साथ अच्छी तरह से नहीं खेलते हैं, यही वजह है कि मुझे यह करना था। इसे वापस कन्वर्ट करने के लिए, आप बस इस तरह से कुछ चलाया होगा:

 SHA=$(bc <<< "ibase=10;obase=16;<build number>") 

बाश में, जहां <build number> आप एक द्विआधारी से प्राप्त बिल्ड संख्या है फिर, बस git checkout $SHA चलाएं, और वहां आप जाएं

क्योंकि यह ऊपर उल्लेखित के रूप में, Wil Gieseler के समाधान का अनुकूलन है, आपको निम्न पोस्ट-स्क्रिप्ट की भी आवश्यकता होगी:

 # Set the build number to "DEVELOPMENT" /usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

जो आपके जीआईटी के इतिहास को साफ रखता है

आप एप्पल की सामान्य संस्करण का उपयोग कर सकते हैं असल में आप को यह करना है agvtool next-version -all को कॉल करें agvtool next-version -all निर्देशिका में से जो आपके .xcproj फ़ाइल को होस्ट करता है अधिक जानकारी के लिए ऊपर यूआरएल देखें।

मैंने संशोधित कार्यविधि की कोशिश की और यह काम नहीं करता, क्योंकि: –

  1. Xcode 4.2.1 में xcuserdata subdirectory को .xcodeproj में बदलता है

  2. git प्रोजेक्ट-इन्फो.प्लिस्ट में पिछले परिवर्तन को नोट करता है

निम्न संशोधन को इन्हें अनदेखा करने का कारण बनता है और केवल वास्तविक परिवर्तन झलकता है: –

 if [ -n "$(find $dir \! -path "*xcuserdata*" \! -path "*.git" -newer $plist)" ]; then 

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

स्कीम (उत्पाद / संपादन योजना / पुरालेख / प्री-एक्शन) में आप एक ऐसी स्क्रिप्ट जोड़ सकते हैं जो केवल तब जब आप संग्रह करते हैं तब निष्पादित किया जाएगा।

साथ ही, आप ऐप संस्करण को बढ़ाते समय हर बार बिल्ड नंबर रीसेट करना चाह सकते हैं

आखिरी बात, यदि आप इसके बजाय संग्रह का उपयोग करते हैं, तो आप सुरक्षित रूप से अक्षम कर सकते हैं:

 # if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then ... # else # echo "Not incrementing build number as source files have not changed" # fi 

जैसा कि निर्माण संख्या बढ़ेगी, जब आप संग्रह करेंगे

संपादित करें: मैंने जो कहा था ठीक करें, संग्रह में पूर्व-क्रिया के निर्माण के बाद (लेकिन संग्रह करने से पहले) हो, तो निर्माण संख्या अगले संग्रह के लिए वृद्धि होगी … लेकिन आप एक नई योजना बना सकते हैं और इस क्रिया को निर्माण (पूर्व- इस नई योजना का हिस्सा) और जब आप एक नई बिल्ड बनाना चाहते हैं तो इस योजना का उपयोग करें

मैं बिल्ड नंबर के लिए अंतिम एसवीएन संशोधन का उपयोग करता हूँ यदि आप बिल्ड डायरेक्टरी में Info.plist को बदलते हैं, तो आप स्रोत Info.plist को प्रभावित नहीं करेंगे:

 # use the last SVN revision as the build number: Info_plist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Info.plist" defaults write "${Info_plist}" CFBundleVersion `svn stat -u | awk '/'"Status against revision:"'/ {print $4}'` 

आप एक्सकोडबंप नामक एक नए उपकरण को विकसित करना चाहते हैं। यह दोनों CFBundleShortVersionString और CFBundleVersion अद्यतन करने को संभाल कर सकते हैं। अंतिम चरण के रूप में यह git को चेक कर देगा और प्रतिबद्धता को उन CFBundle मानों के साथ मिलान करने के लिए टैग करेगा।

Xcodebump परियोजना यहां स्थित है:

https://github.com/markeissler/Xcodebump

यहाँ मेरा समाधान है अगर आप मुझे पसंद कर रहे हैं: टर्मिनल मैत्रीपूर्ण, रूबी जैसे, अर्थ संस्करण, यह कोशिश करें।

Rakefile नाम की एक फ़ाइल बनाएं जिसमें यह शामिल है:

 require "xcodeproj" require "versionomy" XCODEPROJECT = "MyProject.xcodeproj" INFOPLISTFILE = "MyProject/MyProject-Info.plist" $UPDATES = [:major,:minor,:tiny] $UPDATES.each { |part| desc "increment #{part} part of version" task "increment:#{part}" do |task| version=`/usr/libexec/Plistbuddy -c "Print CFBundleVersion" #{INFOPLISTFILE}`.chomp version=Versionomy.parse(version) version=version.bump(part) # I use the same string for CFBundleVersion and CFBundleShortVersionString for now `/usr/libexec/PlistBuddy -c "Set :CFBundleVersion #{version}" #{INFOPLISTFILE}` `/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString #{version}" #{INFOPLISTFILE}` print "version upgraded to #{version}\n" end } 

तैयार करें: gem install xcodeproj versionomy

भागो: rake increment:major या rake increment:minor या rake increment:tiny जब भी आप चाहते हैं

मैं निम्नलिखित विधि द्वारा build number करके अपडेट करता हूं

$INFO_FILE plist फ़ाइल का पथ है और $build_number इस बिल्डिंग के लिए एक नया बिल्ड नंबर है।

 /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_number" "${INFO_FILE}" 

आम तौर पर, मेरे $build_number major और minor भागों से बना है। minor परियोजना की जानकारी से आया है इसलिए मैं बताता हूं कि major हिस्से को कैसे उत्पन्न किया जाए।

 ## Composed by `major` and `minor`. ## `minor` is parsed from project information. It's another story. ## Examples: `21.1`, or `21.1.3` build_number="${major_number}.${minor_number}" 

मेरे पास $build_number तय करने के लिए 2 रणनीतियों हैं $build_number

पहली रणनीति

यह रणनीति build number के major को तय करने के लिए git tag गणना का उपयोग करती है। यदि इस परियोजना के 53 टैग हैं, तो यह शेल स्क्रिप्ट के तहत 53 लौटाएगा।

आम तौर पर, यह बढ़ रहा है और यह डेवलपर को प्रकाशित करने से पहले एक जीआईटी टैग डालने के लिए मजबूर करेगा।

 major_number=$(git tag -l | wc -l | grep -oE "\d+") 

दूसरी रणनीति

जेनकीस सीआई प्रणाली को major भाग का फैसला करना चाहिए। इसमें एक वातावरण चर BUILD_NUMBER । सीआई प्रणाली पर निर्माण करते समय यह स्वचालित रूप से बढ़ रहा है सीआई प्रणाली पर परियोजना इतिहास का पता लगाने के लिए यह जानकारी उपयोगी है

 major_number=${BUILD_NUMBER}