ios - एक्सकोड में बनाम संस्करण बनाम




xcode (5)

मेरे पास एक ऐप है जिसे मैंने एक्सकोड 3 के साथ विकसित किया है और हाल ही में एक्सकोड 4 के साथ संपादन करना शुरू कर दिया है। लक्ष्य सारांश में मेरे पास फ़ील्ड के साथ आईओएस एप्लिकेशन लक्ष्य फॉर्म है: पहचानकर्ता, संस्करण, निर्माण, डिवाइस और तैनाती लक्ष्य। संस्करण फ़ील्ड रिक्त है और बिल्ड फ़ील्ड 3.4.0 है (जो ऐप के संस्करण से मेल खाता है जब से मैं अभी भी एक्सकोड 3 के साथ संपादन कर रहा था)।

मेरे प्रश्न हैं:

  1. संस्करण और निर्माण क्षेत्रों के बीच क्या अंतर है?

  2. एक्सकोड 4 में अपग्रेड करने के बाद वर्जन फ़ील्ड रिक्त क्यों था?


(बस इसे अपने संदर्भ के लिए यहां छोड़ दें।) यह एक्सकोड लक्ष्य में दिखाई देने वाले "संस्करण" और "बिल्ड" फ़ील्ड के लिए संस्करण दिखाएगा और निर्माण करेगा:

- (NSString*) version {
    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    return [NSString stringWithFormat:@"%@ build %@", version, build];
}

स्विफ्ट में

func version() -> String {
    let dictionary = NSBundle.mainBundle().infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as? String
    let build = dictionary["CFBundleVersion"] as? String
    return "\(version) build \(build)"
}

उपरोक्त उत्तर में बिल्ड नंबर को स्वत: बनाने के लिए स्क्रिप्ट मेरे लिए काम नहीं करती है अगर बिल्ड नंबर एक फ़्लोटिंग पॉइंट मान है, इसलिए मैंने इसे थोड़ा संशोधित किया:

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=`echo $buildNumber +1|bc`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

खेतों को पुन: व्यवस्थित / पुनर्निर्मित करने के लिए ऐप्पल प्रकार।

आगे बढ़ते हुए, यदि आप अपने एप्लिकेशन लक्ष्य के लिए जानकारी टैब देखते हैं, तो आपको अपने संस्करण (उदाहरण के लिए, 3.4.0) और "बंडल संस्करण" के रूप में "बंडल संस्करण स्ट्रिंग, शॉर्ट" का उपयोग अपने बिल्ड के रूप में करना चाहिए (उदाहरण के लिए, 500 या 1 ए 500 )। यदि आप उन्हें दोनों नहीं देखते हैं, तो आप उन्हें जोड़ सकते हैं। वे सारांश टैब पर उचित संस्करण और टेक्स्टबॉक्स बनायेंगे; वे एक ही मूल्य हैं।

जानकारी टैब को देखते समय, यदि आप राइट-क्लिक करें और रॉ कुंजी / मान दिखाएँ चुनें, तो आप देखेंगे कि वास्तविक नाम CFBundleShortVersionString (संस्करण) और CFBundleVersion (Build) हैं।

संस्करण आमतौर पर एक्सकोड 3 के साथ इसका उपयोग करने के लिए प्रतीत होता है। मुझे यकीन नहीं है कि आप संस्करण / बिल्ड अंतर के बारे में किस स्तर पर पूछ रहे हैं, इसलिए मैं इसे दार्शनिक रूप से उत्तर दूंगा।

सभी प्रकार की योजनाएं हैं, लेकिन एक लोकप्रिय है:

{MajorVersion}। {MinorVersion}। {} संशोधन

  • प्रमुख संस्करण - प्रमुख परिवर्तन, पुन: डिजाइन, और कार्यक्षमता में परिवर्तन
  • मामूली संस्करण - मामूली सुधार, कार्यक्षमता के लिए जोड़
  • संशोधन - बग फिक्स के लिए पैच संख्या

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

कई डेवलपर्स बिल्ड नंबर को 0 पर शुरू करते हैं, और हर बार जब वे बिल्ड करते हैं तो वे नंबर एक को बढ़ाते हैं, हमेशा के लिए बढ़ते हैं। मेरी परियोजनाओं में, मेरे पास एक स्क्रिप्ट है जो हर बार बिल्ड निर्माण संख्या को स्वचालित रूप से बढ़ाती है। नीचे के लिए निर्देश देखें।

  • रिलीज 1.0.0 का निर्माण 542 हो सकता है। 1.0.0 रिलीज के लिए 542 बिल्डों का निर्माण हुआ।
  • रिलीज 1.0.1 578 का निर्माण हो सकता है।
  • रिलीज 1.1.0 का निर्माण 694 हो सकता है।
  • रिलीज 2.0.0 9 4 9 का निर्माण हो सकता है।

ऐप्पल समेत अन्य डेवलपर्स के पास एक बिल्ड संस्करण है जिसमें रिलीज के लिए एक प्रमुख संस्करण + मामूली संस्करण + बिल्ड की संख्या शामिल है। विपणन के लिए उपयोग किए गए मूल्यों के विपरीत ये वास्तविक सॉफ़्टवेयर संस्करण संख्याएं हैं।

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

उदाहरण के लिए, एक्सकोड 4.2 (4 सी 1 3 9)। मार्केटिंग संस्करण 4.2 मुख्य संस्करण 4 बनाएं, मामूली संस्करण सी बनाएं, और बिल्ड नंबर 13 9। अगली रिलीज (संभवतः 4.3) बिल्ड रिलीज 4 डी होगी, और बिल्ड नंबर 0 से शुरू हो जाएगा और वहां से वृद्धि होगी।

आईफोन सिम्युलेटर संस्करण / बिल्ड नंबर वही तरीका हैं, जैसे iPhones, Macs, इत्यादि हैं।

  • 3.2: (7W367 ए)
  • 4.0: (8 ए 400)
  • 4.1: (8 बी 117)
  • 4.2: (8 सी 134)
  • 4.3: (8 एच 7)

अपडेट करें : अनुरोध के अनुसार, बिल्ड स्क्रिप्ट पढ़ने, इसे बढ़ाने के लिए, और इसे ऐप की {App}-Info.plist फ़ाइल पर वापस लिखने के लिए प्रत्येक बार जब आप {App}-Info.plist में अपना ऐप बनाते हैं, तो स्क्रिप्ट बनाने के लिए चरण यहां दिए गए हैं। वैकल्पिक, अतिरिक्त चरण हैं यदि आप अपने संस्करण / बिल्ड नंबर को अपनी Settings.bundle/Root*.plist फ़ाइल में लिखना चाहते हैं।

यह यहां से कैसे लेख से बढ़ाया गया here

एक्सकोड 4.2 - 5.0 में:

  1. अपने एक्सकोड परियोजना लोड करें।
  2. बाएं हाथ फलक में, पदानुक्रम के शीर्ष पर अपनी परियोजना पर क्लिक करें। यह प्रोजेक्ट सेटिंग्स संपादक लोड करेगा।
  3. केंद्र विंडो फलक के बाईं ओर, टैरेट्स शीर्षक के तहत अपने ऐप पर क्लिक करें। आपको प्रत्येक प्रोजेक्ट लक्ष्य के लिए इस सेटअप को कॉन्फ़िगर करने की आवश्यकता होगी।
  4. बिल्ड चरण टैब का चयन करें।
    • एक्सकोड 4 में, निचले दाएं भाग पर, बिल्ड बनाएं चरण बटन पर क्लिक करें और रन स्क्रिप्ट जोड़ें चुनें।
    • एक्सकोड 5 में, संपादक मेनू> बिल्ड चरण जोड़ें > रन स्क्रिप्ट बिल्ड चरण जोड़ें चुनें
  5. कॉपी रन बंडल संसाधन चरण से पहले इसे स्थानांतरित करने के लिए नया रन स्क्रिप्ट चरण खींचें और छोड़ें (जब ऐप-info.plist फ़ाइल आपके ऐप के साथ बंडल की जाएगी)।
  6. नए रन स्क्रिप्ट चरण में, शैल सेट करें: /bin/bash
  7. पूर्णांक बिल्ड संख्याओं के लिए निम्न को स्क्रिप्ट क्षेत्र में कॉपी और पेस्ट करें:

    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
    buildNumber=$(($buildNumber + 1))
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
    

    जैसा कि @ बेडेबीज़ ने बताया, ऐप्पल जेनेरिक agvtool टूल ( agvtool ) भी उपलब्ध है। यदि आप इसके बजाय इसका उपयोग करना पसंद करते हैं, तो पहले कुछ बदलाव करने के लिए कुछ चीज़ें हैं:

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

    ध्यान दें कि agvtool विधि के साथ आप अभी भी समय-समय पर असफल / रद्द किए गए agvtool को बिना किसी त्रुटि के प्राप्त कर सकते हैं। इस कारण से, मैं इस स्क्रिप्ट के साथ agvtool का उपयोग करने की सलाह नहीं है।

    फिर भी, अपने रन स्क्रिप्ट चरण में, आप निम्न स्क्रिप्ट का उपयोग कर सकते हैं:

    "${DEVELOPER_BIN_DIR}/agvtool" next-version -all
    

    next-version तर्क बिल्ड संख्या को बढ़ाता है ( bump भी एक ही चीज़ के लिए उपनाम है), और नए बिल्ड नंबर के साथ Info.plist अद्यतन करता है।

  8. और यदि आपके पास सेटिंग बंडल है जहां आप संस्करण और बिल्ड दिखाते हैं, तो आप संस्करण को अपडेट करने और निर्माण करने के लिए स्क्रिप्ट के अंत में निम्नलिखित जोड़ सकते हैं। नोट: अपनी सेटिंग्स से मेल खाने के लिए PreferenceSpecifiers स्पेसिफायर मान बदलें। PreferenceSpecifiers:2 अर्थ है आपकी प्लिस्ट फ़ाइल में PreferenceSpecifiers स्पेसिफायर एरे के तहत इंडेक्स 2 पर आइटम को देखें, इसलिए 0-आधारित इंडेक्स के लिए, यह सरणी में तीसरी वरीयता सेटिंग है।

    productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    

    यदि आप Info.plist सीधे पढ़ने के बजाय agvtool का उपयोग कर रहे हैं, तो आप इसके बजाय अपनी स्क्रिप्ट में निम्नलिखित जोड़ सकते हैं:

    buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse)
    productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1)
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    
  9. और यदि आपके पास आईपैड और आईफोन के लिए एक सार्वभौमिक ऐप है, तो आप आईफोन फ़ाइल के लिए सेटिंग्स भी सेट कर सकते हैं:

    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist    
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist
    

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

इसके बारे में इस तरह से सोचें:

  • बिल्ड ( CFBundleVersion ): बिल्ड की संख्या। आम तौर पर आप इसे 1 पर शुरू करते हैं और ऐप के प्रत्येक निर्माण के साथ 1 से बढ़ते हैं। यह जल्दी से तुलना करता है कि किस निर्माण की तुलना हाल ही में है और यह कोडबेस की प्रगति की भावना को दर्शाती है। क्यूए के साथ काम करते समय ये बेहद मूल्यवान हो सकते हैं और यह सुनिश्चित करने की आवश्यकता है कि सही बिल्ड के खिलाफ बग लॉग इन हों।
  • मार्केटिंग वर्जन ( CFBundleShortVersionString ): उपयोगकर्ता के सामने वाले नंबर का उपयोग आप अपने ऐप के इस संस्करण को दर्शाने के लिए कर रहे हैं। आम तौर पर यह एक Major.minor संस्करण योजना (उदाहरण के लिए MyAwesomeApp 1.2) का पालन करता है ताकि उपयोगकर्ताओं को यह पता चल सके कि कौन से रिलीज छोटे रखरखाव अपडेट हैं और जो बड़ी सौदे हैं।

अपनी परियोजनाओं में इसे प्रभावी ढंग से उपयोग करने के लिए, ऐप्पल agvtool नामक एक बेहतरीन टूल प्रदान करता है। मैं अत्यधिक इसका उपयोग करने की अनुशंसा करता हूं क्योंकि यह प्लेलिस्ट परिवर्तनों को स्क्रिप्ट करने से कहीं अधिक सरल है। यह आपको बिल्ड नंबर और विपणन संस्करण दोनों को आसानी से सेट करने की अनुमति देता है। यह विशेष रूप से उपयोगी होता है जब स्क्रिप्टिंग (उदाहरण के लिए, प्रत्येक बिल्ड पर बिल्ड नंबर को आसानी से अपडेट करना या यहां तक ​​कि पूछताछ करना कि वर्तमान बिल्ड नंबर क्या है)। जब आप बिल्ड नंबर अपडेट करते हैं तो यह आपके लिए आपके एसवीएन टैग करने जैसी अधिक विदेशी चीजें भी कर सकता है।

इसके प्रयेाग के लिए:

  • "एप्पल जेनेरिक" का उपयोग करने के लिए, वर्जनिंग के तहत, अपनी परियोजना को एक्सकोड में सेट करें।
  • टर्मिनल में
    • agvtool new-version 1 (बिल्ड संख्या 1 को सेट करें)
    • agvtool new-marketing-version 1.0 ( agvtool new-marketing-version 1.0 सेट करें)

अच्छी जानकारी के एक टन के लिए agvtool के मैन पेज देखें


मार्केटिंग रिलीज नंबर उन ग्राहकों के लिए है, जिन्हें संस्करण संख्या कहा जाता है। यह 1.0 के साथ शुरू होता है और 2.0 , 3.0 के लिए छोटे अपडेट के लिए 1.1 , 1.2 और बग फिक्स के लिए 1.0.1 , 1.0.2 के लिए बड़े अपडेट के लिए चला जाता है। यह संख्या रिलीज और नई सुविधाओं के बारे में उन्मुख है।

निर्माण संख्या ज्यादातर निर्माण की आंतरिक संख्या है जो तब तक की गई है। लेकिन कुछ भंडार की शाखा संख्या जैसे अन्य नंबरों का उपयोग करते हैं। यह संख्या अलग-अलग लगभग समान बिल्डों को अलग करने के लिए अद्वितीय होना चाहिए।

जैसा कि आप देख सकते हैं, बिल्ड नंबर आवश्यक नहीं है और यह आपके ऊपर है जो उस नंबर का निर्माण करता है जिसका आप उपयोग करना चाहते हैं। इसलिए यदि आप अपने Xcode को किसी बड़े संस्करण में अपडेट करते हैं, तो बिल्ड फ़ील्ड खाली है। संस्करण फ़ील्ड खाली नहीं हो सकता है!

NSString चर के रूप में बिल्ड नंबर प्राप्त करने के लिए:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

संस्करण संख्या को NSString चर के रूप में प्राप्त करने के लिए:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

यदि आप दोनों एक NSString में चाहते हैं:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

यह एक्सकोड संस्करण 4.6.3 (4H1503) के साथ परीक्षण किया जाता है। बिल्ड नंबर अक्सर कोष्ठक / ब्रेसिज़ में लिखा जाता है। बिल्ड संख्या हेक्साडेसिमल या दशमलव में है।

एक्सकोड में आप प्रोजेक्ट सेटिंग्स में Run script बिल्ड चरण में निम्न को रखकर बिल्ड नंबर को दशमलव संख्या के रूप में स्वतः बढ़ा सकते हैं

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

हेक्साडेसिमल बिल्ड नंबर के लिए इस स्क्रिप्ट का उपयोग करें

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber)) 
buildNumber=$(($buildNumber + 1)) 
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"






xcode