क्या प्रोग्राम को मेरे ऐप का बिल्ड वर्जन प्राप्त करने का कोई तरीका है? मुझे यह पता लगाने में सक्षम होना चाहिए कि उपयोगकर्ता ने AppStore के माध्यम से ऐप को अपडेट किया है, ताकि समायोजन के लिए कुछ कोड निष्पादित किया जा सके।
क्या प्रोग्राम को मेरे ऐप का बिल्ड वर्जन प्राप्त करने का कोई तरीका है? मुझे यह पता लगाने में सक्षम होना चाहिए कि उपयोगकर्ता ने AppStore के माध्यम से ऐप को अपडेट किया है, ताकि समायोजन के लिए कुछ कोड निष्पादित किया जा सके।
जवाबों:
Xcode लक्ष्य सारांश के "संस्करण" फ़ील्ड में आपके द्वारा निर्धारित मूल्य यहाँ है:
स्विफ्ट 3
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
ObjC
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
स्विफ्ट 2
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String
और "बिल्ड":
स्विफ्ट 3
let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
ObjC
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
स्विफ्ट 2
let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
NSBundle.mainBundle()अब हैBundle.main
आप इनफॉरमेंस का इस्तेमाल करके देख सकते हैं
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
का उपयोग करते समय MFMailComposeViewControllerएक "हमसे संपर्क करें" बटन के लिए, मैं उपयोगकर्ता से ई-मेल पर प्राप्त एक स्वरूपित एचटीएमएल के लिए इस कोड का उपयोग करें। यह मुझे वह सारी जानकारी देता है जिसकी मुझे किसी भी समस्या को सुलझाने में मदद करने की आवश्यकता है:
struct utsname systemInfo;
uname(&systemInfo);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *date = [NSDate date];
[formatter setDateFormat:@"MM/dd/yyyy 'at' hh:mm a"];
NSString *dateString = [formatter stringFromDate:date];
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width - 65.0;
NSString *comments = NSLocalizedString(@"Please write your comments below:", nil);
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSString *iOSVersion = [[UIDevice currentDevice] systemVersion];
NSString *emailBody = [NSString stringWithFormat:@"<!DOCTYPE html><html><style> .div {background-color: lightgrey; width: %fpx; padding: 10px; border: 5px solid navy; margin: 2px;}</style><body><div class='div'><p><b>App:</b> %@</p><b><p>Device:</b> %@</p><b><p>iOS Version:</b> %@</p><b><p><p>App Version and Build:</b> %@ (%@)</p><b><p>Date:</b> %@</p> </p></div><font color='red'><b>%@</b></font><br><br></body></html>",screenWidth,appName,deviceModel,iOSVersion,version,build,dateString,comments];
[self setMessageBody:emailBody isHTML:YES];
यह संदेश मिलने पर परिणाम है:
दोनों के लिए अलग से स्विफ्ट संस्करण:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
इस रेपो में इसके शामिल हैं, इसे देखें:
class Info {
static let dictionary = Bundle.main.infoDictionary ?? [:]
enum Value {
case build, version
}
}
extension Info.Value {
var key: String {
switch self {
case .build: return kCFBundleVersionKey as String
case .version: return kCFBundleInfoDictionaryVersionKey as String
}
}
var string: String? { return Info.dictionary[key] as? String }
}
if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }
प्रोजेक्ट सेटिंग्स
मैंने इस उद्देश्य के लिए इस ओपन सोर्स प्रोजेक्ट को लिखा है । मेरी परियोजना महत्वपूर्ण घटनाओं के होने पर सूचनाएं पोस्ट करती है, जैसे कि जब कोई उपयोगकर्ता पहली बार ऐप खोलता है, या अपग्रेड करने के बाद ऐप को खोलता है (उपयोगकर्ता के किस संस्करण से अपग्रेड की गई जानकारी पूरी होती है)। स्रोत सीधा है और समझने में आसान होना चाहिए। यदि आपके कोई प्रश्न / अनुरोध हैं, तो मुझे बताएं।
मैंने हाल ही में इसके बारे में एक ब्लॉग पोस्ट भी लिखा है।
1) ऐप संस्करण प्राप्त करने के लिए आपको एक का उपयोग करना होगा:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) बिल्ड संस्करण प्राप्त करने के लिए आपको एक का उपयोग करना होगा:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];