मुझे अपने 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.