IOS एप्लिकेशन में प्रोग्राम वर्जन / बिल्ड नंबर ऑफ टारगेट को कैसे प्रदर्शित करें?


135

target versionनीचे दी गई छवि की तरह, मैं कैसे प्रोग्रामेटिक रूप से मान प्राप्त कर सकता हूं ?

जैसा कि मेरे Xcode प्रोजेक्ट के लक्ष्य के गुण विंडो में देखा गया है। मैं इसे अपने ऐप की स्प्लैश स्क्रीन में प्रदर्शित करना चाहता हूं, इसलिए मुझे पता है कि वर्तमान में लोग किस संस्करण का उपयोग कर रहे हैं?

जवाबों:


392

कर रहे हैं 2 नंबर!

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

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


संस्करण संख्या प्राप्त करने के लिए :

उद्देश्य सी:

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

स्विफ्ट <3.0:

let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String

स्विफ्ट 3.0+ (5.0 के साथ परीक्षण):

let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String

बिल्ड नंबर प्राप्त करने के लिए :

उद्देश्य सी:

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

स्विफ्ट <3.0:

let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

स्विफ्ट 3.0+ (5.0 तक परीक्षण किया गया):

let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String   

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

पहले उपरोक्त पंक्तियों का उपयोग करें और फिर निम्न का।

उद्देश्य सी:

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

स्विफ्ट (5.0 तक परीक्षण किया गया):

let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"

टिप्पणियाँ:

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

यह Xcode संस्करण 7.3 (7D175) के साथ परीक्षण किया गया है । बिल्ड नंबर अक्सर कोष्ठक / ब्रेसिज़ में लिखा जाता है। बिल्ड नंबर हेक्साडेसिमल या दशमलव में है।

buildandversion


Xcode में आप प्रोजेक्ट सेटिंग्स में बिल्ड चरण में निम्नलिखित रखकर एक बिल्ड को दशमलव संख्या के रूप में बढ़ा सकते 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निम्न कार्य करें:

चरण 1

चरण 1

चरण 2

चरण 2

चरण 3

चरण 3


4
उपरोक्त उदाहरण के लिए बस जोड़ने के लिए, "CFBundleVersion" बिल्ड = 300 है, "CFBundleShortVersionString" संस्करण = 0.41 है। विक्टर का उत्तर सही उत्तर होना चाहिए।
जस्टिंकोह

1
मुझे एक बार हेक्स संख्या के साथ समस्या थी। Apple पूर्णांक का उपयोग करने के लिए कहता है: developer.apple.com/library/ios/documentation/general/Reference/…
हैशियर

क्या आप जानते हैं कि @ "CFBundleShortVersionString" और @ "CFBundleVersion" के लिए कोई स्ट्रिंग स्थिरांक हैं?
igrek

अब जब CI / CD सिस्टम बहुत आम हैं, तो आप उन लोगों के साथ संस्करण # सेट करने के लिए बिल्ड स्क्रिप्ट का उपयोग करने के नुकसान को इंगित करना चाह सकते हैं।
सैम बैलेन्टाइन

1
स्विफ्ट 3.0 के लिए चीजों का नाम बदल दिया गया है: यह Bundle.main.object(forInfoDictionaryKey: "...")अब है।
राफेल

13

आपको अपने प्रोजेक्ट या Xcode में कुछ भी बदलने की आवश्यकता नहीं है। यहाँ दोनों के लिए अलग से स्विफ्ट संस्करण है:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

यह इस रेपो में शामिल है, इसे देखें:

https://github.com/goktugyil/EZSwiftExtensions


कौन सा जवाब? मैं इसे नहीं देखता
Esqarrouth

इसका केवल एक ही उत्तर है, यह उसके दूसरे पैराग्राफ में है
डैनियल गैलास्को

3
हाँ, 1. बहुत अधिक शोर और उसके जवाब में ज्यादा संकेत नहीं है। 2. यह स्विफ्ट है, जो कि ऑब्जेक्टिव-सी है। 3. ios5 युग से थैस
Esqarrouth

स्विफ्ट 3.0 के लिए चीजों का नाम बदल दिया गया है: यह Bundle.main.object(forInfoDictionaryKey: "...")अब है।
राफेल

5

यहां स्विफ्ट 3 के लिए समान कोड :

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

Bundle.maininfoDictionaryमेरे लिए एक खाली था ; हो सकता है क्योंकि मैं इसे एक ढांचे के भीतर से कर रहा हूं, एक निष्पादन योग्य या ऐप नहीं? Bundle(for: MyClass.self)इसमें अपेक्षित मूल्य समाहित हैं।
राफेल

4

प्रोग्रामेटिक रूप से संस्करण प्रदर्शित करें और संख्या बनाएँ - स्विफ्ट 4.0

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"

let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"            

let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"

1

जैसे भी इस्तेमाल कर सकते हैं

var appVersion: String {
  //versionNumber
  let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"

  //buildNumber
  let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"

  return "Version: #\(versionNumber) (#\(buildNumber))"
}

तब आप कहीं भी उपयोग कर सकते हैं जब आप ग्लोबली घोषित करते हैं।

print(appVersion)

आउटपुट:

Version: #1.0 (#1.0.3)

1

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

extension Bundle {
    var releaseVersionNumber: String? {
        return infoDictionary?["CFBundleShortVersionString"] as? String
    }

    var buildVersionNumber: String? {
        return infoDictionary?["CFBundleVersion"] as? String
    }

    var applicationName: String {
        return infoDictionary?["CFBundleDisplayName"] as? String ?? "ADKATech"
    }

    var applicationReleaseDate: String {
        return infoDictionary?["ApplicationReleaseDate"] as? String ?? Date().description
    }

    var applicationReleaseNumber: Int {
        return infoDictionary?["ApplicationReleaseNumber"] as? Int ?? 0
    }

    var releaseVersionNumberPretty: String {
        return "\(releaseVersionNumber ?? "1.0.0")"
    }

    var buildVersionNumberPretty: String {
        return "\(buildVersionNumber ?? "1")"
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.