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


386

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

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



6
वह ऑब्जेक्टिव-सी है, स्विफ्ट नहीं।
यविंद विक

10
सुनिश्चित करें कि भ्रमित न हों CFBundleVersionऔर CFBundleShortVersionString`। पहला आपका बिल्ड संस्करण है। अन्य संस्करण संख्या है। अधिक जानकारी के लिए यहां देखें
हनी

1
@ YouyvindVik अधिकांश लोग मानते हैं कि आप हाथ पकड़े बिना स्विफ्ट करने के लिए एक उद्देश्य-सी समाधान का अनुवाद कर सकते हैं।
gnasher729

जवाबों:


424

संपादित करें

स्विफ्ट 4.2 के लिए अपडेट किया गया

let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String

संपादित करें

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

let nsObject: AnyObject? = Bundle.main.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

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

डेविड


जब मैं इस का उपयोग, मैं एक संकलक त्रुटि मिलती है: "[NSObject AnyObject] एक सदस्य 'सबस्क्रिप्ट' नाम दिया है नहीं करता है?"
एंड्रियास

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

18
@andras infoDictionaryका उपयोग करके अलिखित किया जाना चाहिए !। यह वही है जो मैं उपयोग कर रहा हूं, एक Globals.swift फ़ाइल में रखा गया है:let appVersion = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as String
azdev

1
मुझे एक और जोड़ना था "!" "जैसा"। let appVersion = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as! String
योसी

3
आपको एक मजबूर अनट्रैप का उपयोग करने से बचना चाहिए "!" जब भी वे आपके एप्लिकेशन को क्रैश करेंगे, जब भी उन मूल्यों में से एक शून्य होगा
जूलियस

278

मुझे पता है कि यह पहले ही जवाब दे दिया गया है, लेकिन मुझे लगता है कि यह थोड़ा साफ है:

स्विफ्ट 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
}

इस तरह, अगर लेट वर्जन कंडीशनल प्रोसेसिंग (मेरे मामले में लेबल टेक्स्ट को सेट करना) को ध्यान में रखता है और यदि इन्फर्मेशन या CFBundleShortVersionString एनआईएल है तो वैकल्पिक अल्ट्रापिंग कोड को छोड़ देगा।


6
self.labelVersion.textवैकल्पिक प्रकार है, तो आप सीधे असाइन कर सकते हैंNSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
Jonauz

8
क्या कोई कारण है जो मूल्य निर्धारित नहीं होगा? इससे सहमत निश्चित रूप से अधिक सतर्क है let, बस सोच रहा था कि इसकी आवश्यकता क्यों हो सकती है। धन्यवाद!
Crashhalot

@Crashalot आपके नाम के बावजूद;) आप नहीं चाहते कि आपका ऐप क्रैश हो जाए, कहे, आप एक टाइपो बनाते हैं, बल्कि संस्करण संख्या "कुछ गलत हो गया" है।
डैनियल स्प्रिंगर

ओपी: आप की जगह ले सकते हैं? साथ में ! और "स्ट्रिंग के रूप में" हटा दें। यदि यह शून्य है, तो यह दुर्घटनाग्रस्त नहीं होने वाला है
डैनियल स्प्रिंगर

245

स्विफ्ट 3.0 के लिए अपडेट किया गया

NS-Prefixes अब स्विफ्ट 3.0 में चले गए हैं और कई गुण / तरीकों नाम बदल गए हैं होने के लिए अधिक Swifty। यहाँ अब ऐसा दिखता है:

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

Bundle.main.releaseVersionNumber
Bundle.main.buildVersionNumber

पुराना अद्यतन उत्तर

मैं अपने मूल उत्तर के बाद से फ्रेमवर्क के साथ बहुत काम कर रहा हूं, इसलिए मैं अपने समाधान को कुछ इस तरह से अद्यतन करना चाहता था कि दोनों सरल और बहु-बंडल वातावरण में अधिक उपयोगी हैं:

extension NSBundle {

    var releaseVersionNumber: String? {
        return self.infoDictionary?["CFBundleShortVersionString"] as? String
    }

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

}

अब यह एक्सटेंशन मुख्य बंडल और किसी भी अन्य शामिल बंडल (जैसे विस्तार प्रोग्रामिंग के लिए एक साझा ढांचा या AFNetworking जैसे तीसरे ढांचे) दोनों की पहचान करने के लिए ऐप्स में उपयोगी होगा, जैसे:

NSBundle.mainBundle().releaseVersionNumber
NSBundle.mainBundle().buildVersionNumber

// or...

NSBundle(URL: someURL)?.releaseVersionNumber
NSBundle(URL: someURL)?.buildVersionNumber

मूल उत्तर

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

extension NSBundle {

class var applicationVersionNumber: String {
    if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"]

जैसा? स्ट्रिंग {रिटर्न संस्करण} रिटर्न "संस्करण संख्या उपलब्ध नहीं है"}

class var applicationBuildNumber: String {
    if let build = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String {
        return build
    }
    return "Build Number Not Available"
}

}

तो अब आप इसे आसानी से एक्सेस कर सकते हैं:

let versionNumber = NSBundle.applicationVersionNumber

CFBundleVersionKey अब स्विफ्ट 3, Xcode में काम नहीं करती है। क्या आप उपयोग करने के लिए नई कुंजी जानते हैं?
Crashalot

71

मुझे यह भी पता है कि यह पहले ही उत्तर दिया जा चुका है लेकिन मैंने पिछले उत्तरों को लपेट लिया है:

(*) एक्सटेंशन के लिए अपडेट किया गया

extension Bundle {
    var releaseVersionNumber: String? {
        return infoDictionary?["CFBundleShortVersionString"] as? String
    }
    var buildVersionNumber: String? {
        return infoDictionary?["CFBundleVersion"] as? String
    }
    var releaseVersionNumberPretty: String {
        return "v\(releaseVersionNumber ?? "1.0.0")"
    }
}

उपयोग:

someLabel.text = Bundle.main.releaseVersionNumberPretty

@Deprecated: पुराने उत्तर

स्विफ्ट 3.1 :

class func getVersion() -> String {
    guard let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
        return "no version info"
    }
    return version
}

पुराने संस्करणों के लिए :

class func getVersion() -> String {
    if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String {
        return version
    }
    return "no version info"
}

इसलिए यदि आप लेबल पाठ सेट करना चाहते हैं या कहीं और उपयोग करना चाहते हैं;

self.labelVersion.text = getVersion()

1
or: class func getVersion () -> स्ट्रिंग {वापसी NSBundle.mainBundle ())। जानकारी। [? "" CFBundleShortVersionString "] के रूप में? स्ट्रिंग ?? "नो वर्जन
इंफो

मुझे लगता है कि अन्य उत्तरों की नकल करने का कोई मतलब नहीं है। यदि आपका जवाब अब मान्य नहीं है, तो आपके पास हमेशा इसे हटाने और अन्य उत्तरों के लिए जगह बनाने की संभावना है :)
carmen_munich

1
@carmen_munich चूंकि आप यहां बदनामी करते हैं इसलिए मुझे आपको जवाब देना होगा। सबसे पहले, यह उत्तर मार्च 2015 को पोस्ट किया गया है और आपका उत्तर फरवरी 2017 को पोस्ट किया गया है। इसलिए, आपकी प्रेरणा पहले के उत्तर से आनी चाहिए। दूसरे, मैंने आपका उत्तर बिल्कुल नहीं देखा है, मैंने अपना उत्तर अपडेट कर दिया है क्योंकि मैं आजकल इसका उपयोग करता हूं। मेरे विचार से iOS समुदाय में किसी एक्सटेंशन का उपयोग करना अद्वितीय नहीं है। वास्तव में, कृपया परिपक्व होने की कोशिश करें और अन्य डेवलपर्स का सम्मान करें। मैं यहाँ कुछ भी पोस्टिंग हासिल नहीं करता। मैं लोगों की मदद करना चाहता हूं। कृपया एसओ पर मदद करने की कोशिश कर रहे लोगों को हतोत्साहित न करें।
गुन्न

मैंने newbies से बहुत प्रतिक्रिया सुनी कि वे एक उत्तर पोस्ट करते हैं और देखना चाहते हैं कि कोई व्यक्ति "अप" पर क्लिक करता है जो लोगों को देखना और प्रेरित करना वास्तव में अच्छा है। लेकिन अगर कोई व्यक्ति अपने पुराने उत्तर में नकल करता है तो जिसने इसे पोस्ट करने का प्रयास किया है, उसे यह प्रेरणा नहीं मिलेगी कि किसी ने उसे वोट दिया। इसलिए नए शौक वास्तव में निराशा का अनुभव करते हैं और यह महसूस करते हैं कि वे समुदाय में मूल्य नहीं लाते हैं और पोस्ट करना बंद कर देते हैं। और यह गलत नहीं है, मैं सामान्य रूप में इसका मतलब है। आशा है कि आप नाराज महसूस नहीं करेंगे और अब बेहतर समझेंगे कि मैंने यह सुझाव क्यों दिया।
carmen_munich

@carmen_munich यदि आप कालानुक्रमिक रूप से इस प्रश्न के उत्तर देते हैं, तो आप देखेंगे कि किसी अन्य व्यक्ति ने पहले से ही वही उत्तर दिया है जैसा आपने पहले दिया था! इसलिए आप मुझ पर कुछ आरोप लगा रहे हैं जो आपने खुद किया है। जब से मैंने इस प्रश्न के लिए इतिहास लिखा है, मैंने एक अद्यतन में अपनी नई उपयोग वरीयताओं को साझा किया। बस इतना ही।
गुन्न


28

मैंने बंडल पर एक एक्सटेंशन बनाया

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

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

नए नाम के रूप में पोस्ट करने के लिए नाम बदलना और बल प्रयोग करना परिवर्तन नहीं है। इसके अलावा, लोग सीख सकते हैं कि जब वे आपका जवाब देखेंगे, तो वे बल प्रयोग नहीं कर सकते। पाठकों के लिए, यह मान लेना कि कुंजी नहीं है, यह हमेशा बेहतर होता है कि बल प्रयोग करने के बजाय वैकल्पिक रूप से अलिखित को संभालना बेहतर होता है।
गुंजन

निष्पक्ष होने के लिए कुछ दुर्लभ मामले हैं जहां बल प्रयोग करना ठीक है। यह एक पोस्ट सिर्फ एक मामला दिखाता है जहां यह ठीक हो सकता है। यदि आप बल प्रयोग के मामलों के बारे में अधिक जानना चाहते हैं तो पॉल हडसन के कुछ अच्छे स्पष्टीकरण और ट्यूटोरियल हैं। मैं वास्तव में सभी newbies www.hackingwithswift.com को सलाह दे सकता हूं
carmen_munich

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

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

16

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

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

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

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

भ्रामक रूप से 'CFBundleVersion' बिल्ड नंबर है जैसा कि Xcode में जनरल-> आइडेंटिटी पर दर्ज किया गया है।


15

Xcode 9.4.1 स्विफ्ट 4.1

बंडल प्रदर्शन नाम का सही भाषा संस्करण लेने के लिए स्थानीयकृतइन्फोएडर के उपयोग पर ध्यान दें।

var displayName: String?
var version: String?
var build: String?

override func viewDidLoad() {
    super.viewDidLoad()

    // Get display name, version and build

    if let displayName = Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String {
        self.displayName = displayName
    }
    if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
        self.version = version
    }
    if let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
        self.build = build
    }
}

14

Xcode 8, स्विफ्ट 3:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

12

स्विफ्ट 4, बंडल के लिए उपयोगी एक्सटेंशन

import Foundation

public extension Bundle {

    public var shortVersion: String {
        if let result = infoDictionary?["CFBundleShortVersionString"] as? String {
            return result
        } else {
            assert(false)
            return ""
        }
    }

    public var buildVersion: String {
        if let result = infoDictionary?["CFBundleVersion"] as? String {
            return result
        } else {
            assert(false)
            return ""
        }
    }

    public var fullVersion: String {
        return "\(shortVersion)(\(buildVersion))"
    }
}

इसका उपयोग करने के लिए आपको बंडल .ain.fullVersion कहना होगा
जोसेफ

11

बंडल + Extensions.swift

import Foundation

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

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

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

उपयोग:

someLabel.text = Bundle.main.versionNumber

11

ओपी ने वर्जन नंबर और बिल्ड नंबर दोनों के लिए कहा। दुर्भाग्य से अधिकांश उत्तर उन दोनों विकल्पों को प्रदान नहीं करते हैं। इसके अतिरिक्त, अन्य अनावश्यक विस्तार विधियों को जोड़ते हैं। यहाँ एक बहुत आसान है और ओपी की समस्या हल करता है:

// Example output: "1.0 (234)"
private func versionAndBuildNumber() -> String {
  let versionNumber = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
  let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
  if let versionNumber = versionNumber, let buildNumber = buildNumber {
    return "\(versionNumber) (\(buildNumber))"
  } else if let versionNumber = versionNumber {
    return versionNumber
  } else if let buildNumber = buildNumber {
    return buildNumber
  } else {
    return ""
  }
}

9

मेरा उत्तर (अगस्त २०१५ के अनुसार), दी गई स्विफ्ट का विकास जारी है:

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

8

मैंने UIApplication के लिए एक एक्सटेंशन बनाया।

extension UIApplication {
    static var appVersion: String {
        let versionNumber = Bundle.main.infoDictionary?[IdentifierConstants.InfoPlist.versionNumber] as? String
        let buildNumber = Bundle.main.infoDictionary?[IdentifierConstants.InfoPlist.buildNumber] as? String

        let formattedBuildNumber = buildNumber.map {
            return "(\($0))"
        }

        return [versionNumber,formattedBuildNumber].compactMap { $0 }.joined(separator: " ")
    }
}

struct IdentifierConstants {
    struct InfoPlist {
        static let versionNumber = "CFBundleShortVersionString"
        static let buildNumber = "CFBundleVersion"
    }
}

6

प्रलेखन को देखने के बाद, मेरा मानना ​​है कि निम्नलिखित क्लीनर है:

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

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


1
सही स्विफ्ट रास्ता, कोई बल नहीं पकड़ना, कहीं भी
जुआन बोइरो


4

स्विफ्ट 3:

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

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

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

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

बिल्ड नंबर के बारे में कैसे? धन्यवाद! CFBundleVersionKey काम नहीं करता है।
Crashalot

@ चरसालोट मैंने इसे बिल्ड नंबर के साथ भी अपडेट किया। यहां सभी कोर फाउंडेशन कीज़ की सूची भी दी गई है: developer.apple.com/library/content/documentation/General/…
jasonnoahchoi

3

स्विफ्ट 4

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

Bundle.main.infoDictionary! [ "CFBundleShortVersionString"]

पुरानी वाक्य रचना को स्विफ्ट करें

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

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

}

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


2

यहाँ स्विफ्ट 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)"
    }
}

2

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

var appVersion: String {
    return Bundle.main.infoDictionary![kCFBundleVersionKey as String] as! String
}


1

स्विफ्ट 4

// पहले एक वैकल्पिक AnyObject के रूप में परिभाषित करके nsObject प्राप्त करें

let nsObject: AnyObject? = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as AnyObject

// तब केवल ऑब्जेक्ट को एक स्ट्रिंग के रूप में कास्ट करें, लेकिन सावधान रहें, आप शून्य के लिए दोहरी जांच कर सकते हैं

let version = nsObject as! String

1

Int के रूप में ऐप संस्करण को वापस करने के लिए सरल उपयोगिता फ़ंक्शन

func getAppVersion() -> Int {

        if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {

            let appVersionClean = appVersion.replacingOccurrences(of: ".", with: "", options: NSString.CompareOptions.literal, range:nil)

            if let appVersionNum = Int(appVersionClean) {
                return appVersionNum
            }
        }
        return 0
    }


0

रुचि रखने वाले किसी भी व्यक्ति के लिए, एक अच्छी और साफ-सुथरी लाइब्रेरी है, जिसे गिथूब कहा जाता SwifterSwiftहै और यह भी पूरी तरह से तेज के हर संस्करण के लिए दस्तावेज (देखें swifterswift.com )।

इस लाइब्रेरी का उपयोग करना, ऐप वर्जन पढ़ना और नंबर बनाना उतना ही आसान होगा:

import SwifterSwift

let buildNumber = SwifterSwift.appBuild
let version = SwifterSwift.appVersion


0

स्विफ्ट 5 के लिए अपडेट

यहाँ एक फ़ंक्शन है जो यह तय करने के लिए उपयोग कर रहा हूं कि "ऐप अपडेटेड" पृष्ठ दिखाना है या नहीं। यह बिल्ड नंबर देता है, जिसे मैं इंट में परिवर्तित कर रहा हूं:

if let version: String = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
        guard let intVersion = Int(version) else { return }

        if UserDefaults.standard.integer(forKey: "lastVersion") < intVersion {
            print("need to show popup")
        } else {
            print("Don't need to show popup")
        }

        UserDefaults.standard.set(intVersion, forKey: "lastVersion")
    }

यदि इसका उपयोग कभी नहीं किया जाता है तो यह 0 पर वापस आ जाएगा जो वर्तमान बिल्ड संख्या से कम है। नए उपयोगकर्ताओं को ऐसी स्क्रीन नहीं दिखाने के लिए, बस पहले लॉगिन के बाद या ऑन-बोर्डिंग पूरी होने पर बिल्ड नंबर जोड़ें।



-1

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

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

let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]
let version = nsObject as! String
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.