Info.plist से संस्करण पढ़ें


91

मैं बंडल कोड की जानकारी Info.plist से अपने कोड में पढ़ना चाहता हूं, अधिमानतः एक स्ट्रिंग के रूप में। मैं यह कैसे कर सकता हूँ?

जवाबों:


201

आप एक साथ एक शब्दकोश के रूप में अपने Info.plist पढ़ सकते हैं

[[NSBundle mainBundle] infoDictionary]

और आप आसानी से CFBundleVersionउस तरह से संस्करण को प्राप्त कर सकते हैं ।

अंत में, आप के साथ संस्करण प्राप्त कर सकते हैं

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];

उत्तम। यह सीएफ * फ़ंक्शंस की सभी लाइनों की तुलना में बहुत सरल है जो मैं उपयोग कर रहा था ... मुझे यकीन था कि एनएसड्राइव प्राप्त करने का एक त्वरित तरीका होना चाहिए।
स्टूज

16
संस्करण संख्या के लिए, यह कोई फर्क नहीं पड़ता, लेकिन अन्य कुंजी के लिए आप objectForInfoDictionaryKey:इसके बजाय उपयोग करना चाह सकते हैं , क्योंकि यह उपलब्ध होने पर स्थानीय मान लौटाता है:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
जरगनी

20
Xcode4 में ध्यान दें यदि आप लक्ष्य के सारांश पैनल को देखते हैं तो आपको संस्करण और बिल्ड फ़ील्ड दिखाई देंगे। CFBundleVersionबनाया गया है और संस्करण है repurposed किया गया है CFBundleShortVersionString
स्मरणोत्सव

5
यह दोनों संस्करण और बिल्ड नंबर NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
लाएगा

CFBundleShortVersionString को ObjectForKey विधि के लिए कुंजी के रूप में उपयोग करें।

11

स्विफ्ट उपयोगकर्ताओं के लिए:

if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
    print("version is : \(version)")
}

Swift3 उपयोगकर्ताओं के लिए:

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
    print("version is : \(version)")
}

5

मुझे पता है कि खोज और उत्तर के बाद से कुछ समय बीत चुका है।

IOS8 के बाद से स्वीकृत उत्तर काम नहीं कर सकता है।

अब यह करने का नया तरीका है:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);

6
क्या आपके पास लिंक है कि ऐसा क्यों है?
इयान वारबर्टन

4

अब iOS 8 में दोनों फील्ड जरूरी हैं। पहले यह बिना काम करता है CFBundleShortVersionString। लेकिन अब ऐप स्टोर में किसी भी ऐप को सबमिट करने के लिए यह एक आवश्यक प्लिस्ट फ़ील्ड है। और kCFBundleVersionKeyहर नए बिल्ड को अपलोड करने के लिए तुलना की जाती है, जो वृद्धिशील क्रम में होना चाहिए। विशेष रूप से TestFlight के लिए बनाता है। मैं इसे इस तरह से करता हूं,

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }

धन्यवाद .. संस्करण = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; मेरे लिए काम किया
स्विफ्टबॉय

3

स्विफ्ट 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.