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


133

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

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

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

वहाँ बिल्ड नंबर ( plist फ़ाइल में, या कहीं और) वेतन वृद्धि का एक तरीका है जो Xcode को नहीं तोड़ता है?

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


1
अगर किसी को दिलचस्पी है: मैंने स्क्रिप्ट को दशमलव संख्याओं के बजाय हेक्साडेसिमल संख्याओं का उपयोग करने के लिए थोड़ा संशोधित किया - gist.github.com/sascha/5398750
Sascha

1
आप इस स्क्रिप्ट को पूर्व-निर्मित कार्रवाई के रूप में सीधे जोड़ सकते हैं, बाहरी स्क्रिप्ट को लागू करने की कोई आवश्यकता नहीं है। इस स्क्रिप्ट को बिल्ड चरण के साथ न चलाएं; Xcode केवल हर दूसरे बिल्ड में अपडेट किए गए प्लिस्ट को कॉपी करेगा।
एड मैकमैनस

3
आउट-ऑफ-द-बॉक्स मुझे एक "अनुमति अस्वीकृत" त्रुटि मिली, इसलिए मैंने सोचा कि मैं इस प्रश्नोत्तर को किसी और को इंगित करता हूं जो समान अनुभव करता है: stackoverflow.com/q/9850936/519030
जेसन

यह स्क्रिप्ट एक निकास कोड के साथ विफल हो जाती है। 1. क्या कोई भी मेरी मदद कर सकता है?
रॉबर्ट जे। क्लेग

@ टैंडर लगता है कि आप स्क्रिप्ट के तर्क के रूप में प्लिस्ट फ़ाइल की आपूर्ति नहीं कर रहे हैं।
ट्रोजनफे

जवाबों:


29

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

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


मुझे प्लास्ट फाइल में git कमिट (या टैग) की आवश्यकता नहीं है इसलिए एक साधारण इंक्रीमेंट सिस्टम ठीक है (जैसा कि इसके द्वारा प्रदान किया गया है agvtool), हालांकि बिल्ड के दौरान प्लिस्ट को संशोधित करने का कार्य बार-बार Xcode को तोड़ता है (क्योंकि स्क्रिप्ट हैन को हटाने के बाद से) t एक बार दुर्घटनाग्रस्त हो गया, जब यह हर 3 बिल्ड या तो दुर्घटनाग्रस्त हो गया)। यह किसी अन्य रूप में संस्करण जानकारी डाल करने के लिए संभव है plist फ़ाइल और बंडल और App से सुलभ के साथ शामिल है कि है?
trojanfoe

महान स्क्रिप्ट - मैं इसे बनाना चाहता हूँ ह्यूजेस बीआर के सुझाव के साथ केवल इसका उपयोग करना जब संग्रह बनाता है। संख्या को कम रखता है और रिलीज के बीच कई देव बिल्डरों की उपेक्षा करता है।
Jay

5
क्या है get_build_number? क्या यह सिर्फ कुछ प्लेसहोल्डर है?
23

हां, get_build_numberसिर्फ एक प्लेसहोल्डर है - स्पष्ट करने के लिए उत्तर को अपडेट किया।
मोनोलो

72

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

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

शुरू में:

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

अतं मै:

# Set the build number to "DEVELOPMENT"
if [ "${CONFIGURATION}" = "Release" ]; then
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"
fi

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

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

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

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

संस्करण-नियंत्रित प्लिस्ट फ़ाइल से संस्करण संख्याओं को रखना सबसे अच्छा तरीका है, विशेषकर यदि आपके पास प्रति रिलीज़ ब्रेक है और कभी-कभी मर्ज या चेरी-पिक करने की आवश्यकता होती है। धन्यवाद!
मैथ्यू फिलिप्स

14
आप git rev-list --count HEADइसके बजाय उपयोग कर सकते हैं git rev-list HEAD | wc -l | tr -d ' '
kennytm

हम्म। मैंने पाया कि यदि आप fastlaneइस तरह से स्वचालित बिल्ड अपलोड करने के लिए उपयोग करते हैं, तो आप प्राप्त करते हैं: ERROR ITMS-90058: "यह त्रुटि अमान्य है। Info.plist फ़ाइल में कुंजी CFBundleVersion [DEVELOPMENT] के लिए मान में एक अलग-अलग सूची होनी चाहिए। अधिकांश तीन गैर-नकारात्मक पूर्णांक। "
फतहोकू

1
मुझे यकीन नहीं है कि यह कहाँ जाना चाहिए, मैंने पहली स्क्रिप्ट को पहले बिल्ड चरण के रूप में और आखिरी स्क्रिप्ट को अंतिम बिल्ड चरण के रूप में रखा और यह मेरे लिए काम करती है।
विल् गेज़लर

1
आप निश्चित रूप से इस समाधान का उपयोग करके Info.plist कर सकते हैं - यह संपूर्ण बिंदु है। Info.plist को हमेशा "DEVELOPMENT" के सेट किए गए वर्जन नंबर के साथ सेट और चेक किया जाता है, इसे निर्माण प्रक्रिया के दौरान अस्थायी रूप से बदल दिया जाता है और फिर बाद में "DEVELOPMENT" पर सेट किया जाता है ताकि Info.plist स्थिर रहे।
विल् गेज़लर

38

मैंने इस झलक का इस्तेमाल किया है। यह उम्मीद के मुताबिक काम करता है। https://gist.github.com/sekati/3172554 (सारा श्रेय मूल लेखक को जाता है)

यह दर्शाता है कि मैंने समय के साथ संशोधित किया।

xcode-versionString-generator.sh ,

xcode-build-number-generator.sh

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

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

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

# 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 (e.g. 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 into new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Ensure that your starting build number is set to a whole integer and not a float (e.g. 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}"

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

XCode 5: संपादक (मेनू बार) → बिल्ड चरण जोड़ें → कॉपी फ़ाइलें जोड़ें चरण बनाएँ:
जॉनी

@trojanfoe: आप पोस्ट स्क्रिप्ट हुक के रूप में इस स्क्रिप्ट को चला सकते हैं। जब आप अपना कोड रेपो में डालते हैं तो यह परिदृश्य केवल बिल्ड नंबर बढ़ाएगा। LostInTheTrees से नीचे का उत्तर कुछ और है जो आप करना चाहते हैं।
एलिक्स

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

14

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

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

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

#!/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

मेरे पास एक ही आवश्यकता है, यही वजह है कि अगर स्रोत फ़ाइल को संशोधित किया गया है तो बिल्ड नंबर केवल वेतन वृद्धि है। मैंने इसे बहुत अच्छी तरह से काम करने के लिए पाया है और bump_build_number.shनिर्माण के बाद से स्क्रिप्ट में बदलाव नहीं करना पड़ा है ।
ट्रोजनफो फे

14

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

इस Apple के प्रश्नोत्तर के अनुसार :

स्वचालित संस्करण और एग्रावटूल का उपयोग करके संख्याओं का निर्माण

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

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

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

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

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

  • वर्तमान प्रोजेक्ट संस्करण को अपने चयन के मूल्य पर सेट करें।

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

  • एप्पल जेनरिक के लिए संस्करण प्रणाली सेट करें।

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

एप्पल जेनरिक के लिए संस्करण प्रणाली सेट करें

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

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

अपना संस्करण सेट करें और संख्याएँ बनाएँ

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

वर्जन नंबर अपडेट करना

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

xcrun agvtool new-marketing-version <your_specific_version>

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

xcrun agvtool new-marketing-version 2.0

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

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

xcrun agvtool next-version -all

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

xcrun agvtool new-version -all <your_specific_version>

Ex: बिल्ड नंबर को 2.6.9 पर सेट करें

xcrun agvtool new-version -all 2.6.9

बक्शीश:

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

xcrun agvtool what-marketing-version

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

xcrun agvtool what-version

7
इस एक के साथ समस्या यह है कि agvtool एक्सकोड बिल्ड को नष्ट कर देगा, इसलिए इसे बिल्ड चरणों में स्क्रिप्ट के रूप में एकीकृत नहीं किया जा सकता है।
डैनियल श्लाग

1
क्या आप इस योजना के निर्माण पूर्व कार्यों में agvtool के माध्यम से टक्कर नहीं लगा सकते थे?
लोट्टाडॉट

11

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

सीधे Xcode में रन स्क्रिप्ट बिल्ड चरण में स्निपेट को कॉपी / पेस्ट करें :

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;

आप CFBundleVersion कैसे बढ़ा सकते हैं? Xcode 5.1 में यह "1.0" की तरह एक स्ट्रिंग स्वरूपित है?
च्रिस

1
अंत में कोई इसे सही कर रहा है :) मैं अपने देव डिवाइस पर चलने वाले प्रत्येक निर्माण की परवाह क्यों करूंगा? रिलीज (और परीक्षकों के लिए रिलीज) गिनती, "हम्म नहीं, उस 2 पीएक्स को बाईं ओर ले जाएं" बनाता है।
uvesten

7

स्क्रिप्ट के लिए धन्यवाद। यह बहुत अच्छा काम करता है।

मेरा 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 4. {2,3,4,5} के तहत बिना किसी समस्या के कभी भी उपयोग कर रहा हूं।
ट्रोजनफू जूल

अगर मैं यह जवाब देखता तो मैं अपने आप को कुछ घंटे बचा लेता! यह भी ध्यान दें कि hte build number में दशमलव नहीं होना चाहिए, या BASH क्रोक नहीं होगा।
ब्रेंडेन

6

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

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

# 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 (e.g. 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 gist के रूप में भी उपलब्ध है (प्रारूप को कॉपी और पेस्ट करना थोड़ा आसान) ।


5

मैं autorevision के उपयोग की सिफारिश करूंगा

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

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


1
Autorevisionआवश्यकता के रूप में एक बिल्ड नंबर को टक्कर देने के लिए प्रकट नहीं होता है?
ट्रोजनफॉ

यह मानते हुए कि कोई केवल एक नई कमेटी का निर्माण करता है, तो VCS_NUMवही होना चाहिए जो आप देख रहे हैं ( उदाहरण के लिए देखेंautorevision.h )।
dak180

वियना- Info.plist और वियना- All.xcconfig इस बात का एक अच्छा उदाहरण है कि कोई किसी भी xcode प्रोजेक्ट में इसे कैसे सेट कर सकता है।
dak180

4

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

यह पर्ल स्क्रिप्ट परियोजना में सभी 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');
}

आप जिस पोस्ट को उद्धृत कर रहे हैं, वह बताती है कि ' प्रभावी रूप से, LS निम्न प्रारूप की अपेक्षा करता है: nnnnn [.nn [.nn]] [X] जहां n एक अंक 0-9 है, वर्ग कोष्ठक वैकल्पिक घटकों को इंगित करते हैं, और X कोई स्ट्रिंग नहीं है एक अंक के साथ शुरू। उपस्थित होने पर X की उपेक्षा की जाती है। '- तो यह है कि 99999 बनाता है। अधिकांश परियोजनाओं के लिए पर्याप्त होना चाहिए ..?
Jay

@ जय मुझे स्पष्ट रूप से यह गलत लगता है कि चार अंक के रूप में। उफ़। (फिर भी, यदि आपकी विकास शैली में बहुत सारे ट्विकिंग और पुनर्निर्माण शामिल हैं, तो यह समझ से बाहर नहीं है कि आप किसी परियोजना पर विकास के वर्षों के बाद 100,000 बिल्ड तक पहुंच सकते हैं।)
ब्रेंट रॉयल-गॉर्डन

@ BrentRoyal- गॉर्डन ट्रू - मैंने अपनी बिल्ड स्क्रिप्ट को केवल रिलीज कॉन्फिग्स के लिए इन्क्रीमेंट बिल्ड के लिए ट्वीक किया है .. हालांकि मैं शायद कभी भी 10k के पास कहीं भी नहीं पहुँचा हूँ अपने 10+ साल के लिगेसी प्रोडक्ट के साथ यह अच्छा लगता है। नई कोको परियोजनाओं के साथ हेड रूम का भार ;-)
जेई

4

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


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

3

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

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

# 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>"

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

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

bash में, <build number>आपको बाइनरी से मिला बिल्ड नंबर कहां है। फिर, बस दौड़ो git checkout $SHA, और तुम वहाँ जाओ।

क्योंकि यह विल गेज़लर के समाधान का एक अनुकूलन है , जैसा कि ऊपर बताया गया है, आपको निम्न पोस्ट-बिल्ड स्क्रिप्ट की भी आवश्यकता होगी:

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

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


तो यह कैसे काम करता है, यह देखते हुए आप git की जानकारी लिखेंगे Info.plist, जिसे खुद git द्वारा ट्रैक किया जाता है?
ट्रोजनफॉ

@trojanfoe जैसा कि मैंने उत्तर के शीर्ष पर उल्लेख किया है, यह उत्तर विल गेज़लर के समाधान का एक अनुकूलन है। जैसे, उसे उसी पोस्ट-बिल्ड स्क्रिप्ट की आवश्यकता होती है जिसका उपयोग वहाँ किया जाता है। मैंने स्पष्ट रूप से उत्तर में जोड़ दिया है।
रावरॉन

2

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

  1. Xcode 4.2.1 .xcodeproj में xcuserdata उपनिर्देशिका को बदलता है

  2. git Project-Info.plist में पिछले परिवर्तन को नोट करता है

निम्न संशोधन के कारण इन पर ध्यान नहीं दिया जा सकता है और केवल वास्तविक परिवर्तनों को चिह्नित किया जाता है: -

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

2

आप इसे केवल तभी करना चाहते हैं जब आप संग्रह करते हैं (और उदाहरण के लिए TF पर अपलोड करें)। अन्यथा आपके संस्करण की संख्या वास्तव में जल्दी जा सकती है।

स्कीम (प्रोडक्ट / एडिट स्कीम / आर्काइव / प्री-एक्शन) में आप एक स्क्रिप्ट जोड़ सकते हैं, जिसे केवल तभी संग्रहीत किया जाएगा जब आप संग्रह करेंगे।

इसके अलावा, आप ऐप वर्जन को बढ़ाने के लिए हर बार बिल्ड नंबर को रीसेट करना चाह सकते हैं।

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

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

जब आप संग्रह करेंगे तभी बिल्ड नंबर बढ़ेगा ...

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


1
हाँ, यह जल्दी (5500+ पल में) जा रहा है, लेकिन यह मेरे लिए कोई समस्या नहीं है; यह सिर्फ एक संख्या है। यह दिलचस्प है कि कितनी बार Cmd-B / Cmd-R कुछ भी काम करने से पहले ही हिट हो जाता है ...
trojanfoe

2

मैं बिल्ड संख्या के लिए अंतिम SVN संशोधन का उपयोग करता हूं। यदि आप बिल्ड निर्देशिका में 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}'`

2

मुझे ऐसा लगता है कि मैंने अपना गोत्र पाया है। जनजाति, मुझे आशा है कि आप संस्करण X द्वारा चकित हैं।

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

VersionX:

  • बिल्ड प्रकार (रिलीज़ / डीबग) के बारे में पता है
  • रिपॉजिटरी से निर्मित समय पर जानकारी इकट्ठा करता है (git सपोर्ट शामिल है, लेकिन hg, svn, या जो भी आप उपयोग करते हैं उसके लिए अनुकूलित किया जा सकता है)
  • आसानी से अनुकूलन योग्य फैंसी मार्केटिंग वर्जन स्ट्रिंग्स के लिए प्रदान किया जाता है (जो कि ऐप स्टोर के एक कन्वेंशन को लागू करने से पहले बहुत अधिक भिन्नता थी), इसलिए आप स्वचालित रूप से स्ट्रिंग्स को बढ़ा सकते हैं जिसमें उदाहरण के लिए "टैग" का उपयोग करके "बीटा" शामिल था।
  • उदाहरण के लिए संस्करण और प्रतिबद्ध जानकारी वाले चर के साथ आबादी वाला एक वर्ग शामिल है। यह आपके पैनल के बारे में जानकारी देने और लॉग-इन स्ट्रिंग्स, क्रैश रिपोर्ट, या पूर्व-आबाद जानकारी के साथ उपयोगकर्ता ईमेल बग रिपोर्ट बनाने के लिए उपयोगी है।

इसे बनाने में मजा आया। मैंने Xcode बिल्ड सिस्टम के बारे में जानकारी ली।

यहाँ फैंसी संस्करण और बिल्ड स्ट्रिंग्स के प्रकार का एक उदाहरण है।

VersionX 1.0.1 X7 (c5959a3 "क्लीन")

मार्केटिंग संस्करण: वर्जनक्स 1.0.1 Version7 "1.0.1 कमिट के लिए टैग से लिया गया है, जबकि" बीटा 7 "स्वचालित रूप से कमिट काउंट या जेनरेट काउंट (उदाहरण के लिए) द्वारा उत्पन्न होता है।

बिल्ड वर्जन: (c5959a3 "क्लीन") शॉर्ट कम हैश प्रदर्शित करता है, और आपको सूचित करता है कि बिल्ड डायरेक्टरी में शून्य अनक्मिटेड परिवर्तन थे।

वर्जनएक्स (गीथहब में स्रोत) - स्वचालित रूप से वर्जन बढ़ाने और Xcode परियोजनाओं में निर्माण के लिए एक बारोक प्रणाली।

वर्जनएक्स डॉक्यूमेंटेशन।


1

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

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

https://github.com/markeissler/Xcodebump


1

मैं build numberनिम्नलिखित विधि से अद्यतन करता हूं ।

$INFO_FILEplist फ़ाइल का पथ है। और $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}"

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

पहली रणनीति

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

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

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

दूसरी रणनीति

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

major_number=${BUILD_NUMBER}

1

एक अद्यतन संस्करण का उपयोग करता है। यह Xcode 9.3.1, iOS 11 के रूप में काम करता है।

अपने एप्लिकेशन लक्ष्य से 'बिल्ड चरण' पर क्लिक करें, एक नया रन स्क्रिप्ट जोड़ने के लिए + आइकन पर क्लिक करें, और बॉक्स में, इस कोड को पेस्ट करें।

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}"

Info.plist फ़ाइल में जाएं और 'बंडल संस्करण' को 1 पर सेट करें, और 'बंडल संस्करण स्ट्रिंग, लघु' से 1 तक, आपको सेट किया जाना चाहिए।

देखने में Info.plist के साथ प्रोजेक्ट बनाएँ और आपको बंडल संस्करण (बिल्ड नंबर) परिवर्तन देखना चाहिए।

  • ध्यान दें कि Xcode 9.3.1 के रूप में, आप सामान्य टैब से इन परिवर्तनों को नहीं देख पाएंगे, लेकिन बिल्ड बनाते समय और Info.plist में परिवर्तन को देखेंगे।

0

यहाँ मेरा समाधान है। यदि आप मेरे जैसे हैं: टर्मिनल फ्रेंडली, रूबी की तरह, सिमेंटिक वर्जनिंग की तरह, इसे आज़माएँ।

एक फ़ाइल बनाएं जिसका नाम 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जब भी आप चाहते हैं।


0

मुझे यह स्वचालित रूप से संस्करण का उपयोग करने और एग्रावटूल का उपयोग करके संख्याओं का निर्माण करने के लिए सबसे अधिक आश्वस्त है

इसे इस्तेमाल करे:

  1. ऊपर दिए गए Apple के प्रलेखन में वर्णित अनुसार इसे कॉन्फ़िगर करें।
  2. स्क्रिप्ट जोड़ेंप्रोजेक्ट के लिए पूर्व-क्रिया के रूप में -> योजना संपादित करें ... -> संग्रह (या यदि आप चाहें तो अन्य)
  3. सेट करें: से बिल्ड सेटिंग प्रदान करें <your_app_target>

स्क्रिप्ट (पहली पंक्ति वैकल्पिक है):

exec > ${PROJECT_DIR}/prebuild.log 2>&1
cd ${PROJECT_DIR}
xcrun agvtool next-version -all
cd -

0

इसे एप्पल के अपने तरीके से करते हैं। यह प्रत्येक सफल निर्माण के बाद बिल्ड संख्या में वृद्धि करेगा

मैं आपको 5 छवियों के माध्यम से मार्गदर्शन करूंगा, बस इसके माध्यम से जाना।

  1. ड्रॉपडाउन से 'एडिट स्कीम ...' चुनें, जब आप स्टॉप_बिल्ट_बटन के राइट साइड में स्थित अपने प्रोजेक्ट का नाम चुनें। पहले चरण की जाँच करें

  2. बायीं ओर मेनू से 'बिल्ड' विकल्प का विस्तार करें और 'पोस्ट-एक्शन' चेक सेकंड स्टेप चुनें

  3. यहां आप अपने इच्छित कोड (लिपियों) को जोड़ सकते हैं जिन्हें आप अपने कार्यक्रम के सफल निर्माण के बाद निष्पादित करना चाहते हैं। यह वह जगह है जहां हमें अपने स्वचालन के काम को पूरी तरह से करने के लिए थोड़ी मात्रा में कोड जोड़ना होगा। >> 1. नई स्क्रिप्ट फ़ाइल जोड़ने के लिए बाएं कोने से 'ऐड (+)' बटन का चयन करें। 2. अब ड्रॉप डाउन से 'न्यू रन स्क्रिप्ट एक्शन' का चयन करें तीसरा चरण देखें

  4. इसमें 3 फ़ील्ड हैं। 1. 1. शेल पहले से ही आपके लिए असाइन किया गया है। 2. अब 'के लिए आप से सेटिंग बनाएँ' अपने प्रोजेक्ट का नाम चुनें। >> 3. अपने स्क्रिप्ट को जोड़ने के लिए एक बड़ा क्षेत्र है, बस वहां इस कोड को कॉपी और पेस्ट करें: चौथे चरण की जाँच करें

    PLIST = "$ {PROJECT_DIR} / $ {INFOPLIST_FILE}" PLB = / usr / libexec / PlistBuddy LAST_NUMBER = $ ($ PLB -c "प्रिंट CFBELLEVersion" "$ PLIST") NEW_VERSION = $ ($ LAST_NUMBER + 1) PLB -c "सेट: CFBundleVersion $ NEW_VERSION" "$ PLIST"

  5. चौथा चरण पूरा करने के बाद, बस विंडो बंद करने के लिए 'बंद' का चयन करें और हमें अंतिम चरण करना है, प्रोजेक्ट फ़ाइल मेनू में अपनी 'plist.info' फ़ाइल गोटो करें और सुनिश्चित करें कि 'कुंजी' अनुभाग के अंतर्गत 'बंडल संस्करण' कुंजी सबसे अधिक शामिल हैं एक न्यूमेरिक वैल्यू चेक फिफ्थ स्टेप

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.