Чи є спосіб програмно отримати версію збірки мого додатка? Мені потрібно мати можливість виявити, коли користувач оновив додаток через 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
кнопки "Зв'яжіться з нами" я використовую цей код, щоб отримати відформатований HTML на електронну пошту від користувача. Це дає мені всю інформацію, яку мені потрібно почати допомагати у вирішенні будь-якого питання:
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) Для отримання версії Build ви повинні використовувати:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];