जवाबों:
आप संस्करण प्राप्त कर सकते हैं और संख्याएँ निम्नानुसार बना सकते हैं:
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
(NSString *)kCFBundleVersionKey
बजाय उपयोग करने की सलाह दूंगा @"CFBundleVersion"
। भले ही यह टाइप करने के लिए अधिक लंबा हो (ऑटो कम्प्लीट यहां मदद करेगा), क्योंकि यह एक स्थिर समय पर जांचा जाता है।
NSBundle
बजाय इस एक्सटेंशन को बनाना अधिक सटीक होगा, यह UIApplication
उदाहरण के साथ स्थिर कॉल को बदलने की भी अनुमति देगा।
UIApplication
, क्योंकि लौटी जानकारी एप्लिकेशन के बारे में है। इसके अलावा, यह केवल main
बंडल पर लागू होता है - यह किसी भी बंडल पर एक इंस्टेंस विधि बनाने के लिए कोई मतलब नहीं होगा।
build
कहने का मतलब था appBundle
(आपके कोड की दूसरी पंक्ति में)?
यहाँ 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)")
उद्देश्य सी में:
1) ऐप संस्करण प्राप्त करने के लिए आपको एक का उपयोग करना होगा:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) बिल्ड संस्करण प्राप्त करने के लिए आपको एक का उपयोग करना होगा:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
स्विफ्ट में, आप बंडल वर्जन प्राप्त कर सकते हैं:
let info:NSDictionary = NSBundle.mainBundle().infoDictionary!
let version:String = info.objectForKey("CFBundleShortVersionString") as! String
versionLabel.text = "Version:" + version
मेरा एक ओपन सोर्स प्रोजेक्ट, ऐप अपडेट ट्रैकर , यह कार्यक्षमता (और अधिक) वर्ग विधियों के रूप में प्रस्तुत करता है:
+ (NSString *)getShortVersionString
+ (NSString *)getLongVersionString
आप इसका उपयोग इस तरह करेंगे:
#import "AppUpdateTracker.h"
NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
सिर्फ नोट के लिए
किसी भी कुंजी का स्थानीय मूल्य प्राप्त करने के लिए जिसका आपको उपयोग करना चाहिए CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
तो इन दोनों के लिए एक स्विफ्ट संस्करण को अलग से प्रस्तुत करता है:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
इस रेपो में इसके शामिल हैं, इसे देखें: