मुझे अपने iOS प्रोजेक्ट का वर्तमान संस्करण कोड में कैसे मिलेगा?


151

मैं एक NSStringवस्तु के रूप में अपने iOS प्रोजेक्ट / ऐप के वर्तमान संस्करण को एक फाइल में कहीं भी परिभाषित करने के लिए सक्षम होना चाहूंगा । मैं 2 स्थानों में अपना संस्करण मान नहीं बदलना चाहता।

जब मैं प्रोजेक्ट लक्ष्य सारांश में अपना संस्करण टकराता हूं, तो मान को अपडेट करना होगा।

जवाबों:


381

आप संस्करण प्राप्त कर सकते हैं और संख्याएँ निम्नानुसार बना सकते हैं:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String

या ऑब्जेक्टिव-सी में

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];

मेरे पास एक श्रेणी में निम्नलिखित तरीके हैं UIApplication:

extension UIApplication {

    static var appVersion: String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    }

    static var appBuild: String {
        return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
    }

    static var versionBuild: String {
        let version = appVersion, build = appBuild            
        return version == build ? "v\(version)" : "v\(version)(\(build))"
    }
}

Gist: https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9bb


यहाँ उद्देश्य-सी में समतुल्य है:

+ (NSString *) appVersion
{
    return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];    
}

+ (NSString *) build
{
    return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
}

+ (NSString *) versionBuild
{
    NSString * version = [self appVersion];
    NSString * build = [self build];

    NSString * versionBuild = [NSString stringWithFormat: @"v%@", version];

    if (![version isEqualToString: build]) {
        versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build];
    }

    return versionBuild;
}

Gist: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd


1
आप [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleVersion" का उपयोग कर सकते हैं [[NSBundle mainBundle] objectForInfoDictionaryKey के बजाय: (NSString *) kCFBundleVersionKey]। कविता को अच्छी तरह से गाया जा सकता है। ]; इसलिए अब स्मृति में रखना आसान हो गया है
दुरई अमुथान।

4
@Duraiamuthan के (NSString *)kCFBundleVersionKeyबजाय उपयोग करने की सलाह दूंगा @"CFBundleVersion"। भले ही यह टाइप करने के लिए अधिक लंबा हो (ऑटो कम्प्लीट यहां मदद करेगा), क्योंकि यह एक स्थिर समय पर जांचा जाता है।
एशले मिल्स

Btw, इसके NSBundleबजाय इस एक्सटेंशन को बनाना अधिक सटीक होगा, यह UIApplicationउदाहरण के साथ स्थिर कॉल को बदलने की भी अनुमति देगा।
जैको डे

@Zapko - मैं सम्मान से असहमत हूं। वैचारिक रूप से यह फिट बैठता है UIApplication, क्योंकि लौटी जानकारी एप्लिकेशन के बारे में है। इसके अलावा, यह केवल mainबंडल पर लागू होता है - यह किसी भी बंडल पर एक इंस्टेंस विधि बनाने के लिए कोई मतलब नहीं होगा।
एशले मिल्स

क्या आपके buildकहने का मतलब था appBundle(आपके कोड की दूसरी पंक्ति में)?
user1046037

14

यहाँ Xcode 8, स्विफ्ट 3 पर क्या काम किया गया है :

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

print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")

3

उद्देश्य सी में:

1) ऐप संस्करण प्राप्त करने के लिए आपको एक का उपयोग करना होगा:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2) बिल्ड संस्करण प्राप्त करने के लिए आपको एक का उपयोग करना होगा:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

1

स्विफ्ट में, आप बंडल वर्जन प्राप्त कर सकते हैं:

let info:NSDictionary = NSBundle.mainBundle().infoDictionary!

let version:String = info.objectForKey("CFBundleShortVersionString") as! String

versionLabel.text = "Version:" + version

0

मेरा एक ओपन सोर्स प्रोजेक्ट, ऐप अपडेट ट्रैकर , यह कार्यक्षमता (और अधिक) वर्ग विधियों के रूप में प्रस्तुत करता है:

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

आप इसका उपयोग इस तरह करेंगे:

#import "AppUpdateTracker.h"

NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);

0

सिर्फ नोट के लिए

किसी भी कुंजी का स्थानीय मूल्य प्राप्त करने के लिए जिसका आपको उपयोग करना चाहिए CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)


-1

तो इन दोनों के लिए एक स्विफ्ट संस्करण को अलग से प्रस्तुत करता है:

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

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

https://github.com/goktugyil/EZSwiftExtensions


CFBundleVersionKey अब Xcode 8 और Swift 3 पर काम नहीं करता है। क्या आप नई कुंजी जानते हैं?
Crashalot

यहाँ एक तारीख है: github.com/goktugyil/EZSwiftExtensions/blob/…
Esqarrouth
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.