ios - मैं स्विफ्ट का उपयोग करके ऐप संस्करण और बिल्ड नंबर कैसे प्राप्त करूं?




swift (12)

दस्तावेज़ीकरण को देखते हुए, मेरा मानना ​​है कि निम्नलिखित क्लीनर है:

let version = 
NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") 
as? String

Source : "इस विधि का उपयोग अन्य एक्सेस विधियों पर प्राथमिकता दी जाती है क्योंकि यह उपलब्ध होने पर कुंजी के स्थानीयकृत मूल्य को वापस कर देता है।"

मेरे पास एक एज़ोर बैक-एंड वाला आईओएस ऐप है, और लॉग इन की तरह कुछ ईवेंट लॉग करना चाहते हैं और ऐप उपयोगकर्ता के कौन से संस्करण चल रहे हैं।

मैं स्विफ्ट का उपयोग कर संस्करण और बिल्ड नंबर कैसे वापस कर सकता हूं?


मुझे पता है कि इसका पहले से ही उत्तर दिया गया है लेकिन व्यक्तिगत रूप से मुझे लगता है कि यह थोड़ा क्लीनर है:

स्विफ्ट 3.0:

 if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
    self.labelVersion.text = version
}

स्विफ्ट <2.3

if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String {
    self.labelVersion.text = version
}

इस तरह, यदि संस्करण को सशर्त प्रसंस्करण (मेरे मामले में लेबल टेक्स्ट सेट करना) का ख्याल रखना है और यदि infoDictionary या CFBundleShortVersionString nil वैकल्पिक अनैपिंग कोड को छोड़ने का कारण बनता है।


मेरा जवाब (अगस्त 2015 तक), स्विफ्ट को विकसित करना जारी रहता है:

let version = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as! String

मैंने बंडल पर विस्तार किया

extension Bundle {

    var appName: String {
        return infoDictionary?["CFBundleName"] as! String
    }

    var bundleId: String {
        return bundleIdentifier!
    }

    var versionNumber: String {
        return infoDictionary?["CFBundleShortVersionString"] as! String 
    }

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

}

और फिर इसका इस्तेमाल करें

versionLabel.text = "\(Bundle.main.appName) v \(Bundle.main.versionNumber) (Build \(Bundle.main.buildNumber))"

स्विफ्ट 3.0 के लिए NSBundle काम नहीं करता है, कोड के बाद पूरी तरह से काम करता है।

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

और केवल बिल्ड नंबर के लिए, यह है:

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

उलझन में 'CFBundleVersion' सामान्य संख्या> पहचान पर एक्सकोड में दर्ज की गई बिल्ड संख्या है।


स्विफ्ट 3.2 के लिए यहां एक अद्यतन संस्करण है:

extension UIApplication
{
    static var appVersion:String
    {
        if let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString")
        {
            return "\(appVersion)"
        }
        return ""
    }

    static var buildNumber:String
    {
        if let buildNum = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String)
        {
            return "\(buildNum)"
        }
        return ""
    }

    static var versionString:String
    {
        return "\(appVersion).\(buildNumber)"
    }
}

संपादित करें

जैसा कि एक्सकोड के नए संस्करण पर @azdev द्वारा इंगित किया गया है, आपको अपने पिछले समाधान की कोशिश करने के लिए एक संकलन त्रुटि मिलेगी, इसे हल करने के लिए बस इसे संपादित करें बंडल शब्दकोश को अनचाहे करने के लिए सुझाव दिया गया है!

let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]

अंत संपादित करें

उद्देश्य-सी के मुकाबले एक ही तर्क का प्रयोग करें, लेकिन कुछ छोटे बदलावों के साथ

//First get the nsObject by defining as an optional anyObject
let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary["CFBundleShortVersionString"]

//Then just cast the object as a String, but be careful, you may want to double check for nil
let version = nsObject as String

मुझे आशा है कि यह आपकी मदद करेगा।

डेविड


स्विफ्ट 2.0 के लिए

//First get the nsObject by defining as an optional anyObject

let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]
let version = nsObject as! String

स्विफ्ट 3:

संस्करण संख्या

if let versionNumberString = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String { // do something }

निर्माण संख्या

if let buildNumberString = Bundle.main.infoDictionary?["CFBundleVersion"] as? String { // do something }

स्विफ्ट 4.0 के लिए

let version = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let build = Bundle.main.infoDictionary!["CFBundleVersion"]!

स्विफ्ट 4

func getAppVersion() -> String {
    return "\(Bundle.main.infoDictionary!["CFBundleShortVersionString"] ?? "")"
}

Bundle.main.infoDictionary! [ "CFBundleShortVersionString"]

स्विफ्ट पुरानी वाक्यविन्यास

let appVer: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]

extension UIApplication {

    static var appVersion: String {
        if let appVersion = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
            return "\(appVersion)"
        } else {
            return ""
        }
    }

    static var build: String {
        if let buildVersion = NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) {
            return "\(buildVersion)"
        } else {
            return ""
        }
    }

    static var versionBuild: String {
        let version = UIApplication.appVersion
        let build = UIApplication.build

        var versionAndBuild = "v\(version)"

        if version != build {
            versionAndBuild = "v\(version)(\(build))"
        }

        return versionAndBuild
    }

}

ध्यान दें: अगर आपको ऐप वर्जन या बिल्ड सेट नहीं किया गया है तो आपको इसका उपयोग करना चाहिए यदि आप उपयोग करने का प्रयास करते हैं तो क्रैश हो जाएगा! खोलने के लिए।







swift