Я пишу додаток для iPhone. Він уже опублікований, але я хотів би додати функцію, де відображається номер її версії.
Я б не мав цього робити вручну з кожною версією, яку випускаю ...
Чи є спосіб у target-C дізнатися, яка версія мого додатка?
Я пишу додаток для iPhone. Він уже опублікований, але я хотів би додати функцію, де відображається номер її версії.
Я б не мав цього робити вручну з кожною версією, яку випускаю ...
Чи є спосіб у target-C дізнатися, яка версія мого додатка?
Відповіді:
Як я тут описую , я використовую скрипт, щоб переписати файл заголовка з моїм поточним номером редакції Subversion. Цей номер редакції зберігається в константі kRevisionNumber. Потім я можу отримати доступ до версії та номеру версії, використовуючи щось подібне до наступного:
[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]
який створить рядок формату "Версія 1.0 (51)".
CFBundleShortVersionString
що зазвичай потрібно для "версії" та CFBundleVersion
для номера збірки.
[NSString stringWithFormat:@"Version: %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]]
Спираючись на відповідь Бреда Ларсона, якщо у вас є інформація про основні та другорядні версії, що зберігаються в інформаційному списку (як я це робив у конкретному проекті), це добре працювало для мене:
- (NSString *)appNameAndVersionNumberDisplayString {
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];
return [NSString stringWithFormat:@"%@, Version %@ (%@)",
appDisplayName, majorVersion, minorVersion];
}
Тепер перегляд незначної версії вручну може бути болем, і тому використання хитрості витівки з номером ревізії джерела є ідеальним. Якщо ви цього не зробили (як я цього не зробив), описаний вище фрагмент може бути корисним. Це також виводить відображуване ім’я програми.
Швидка версія для обох окремо:
Швидкий 3
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Швидкий 2
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Його включено до цього репо, перевірте:
Це я зробив у своїй заяві
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Сподіваємось, ця проста відповідь комусь допоможе ...
Ви можете вказати CFBundleShortVersionString
рядок у plist.info та прочитати програму за допомогою наданого API .
Є дві речі - версія версії та версія додатка.
Щоб отримати версію програми:
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Щоб отримати версію Build:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
замість того, infoDictionary] objectForKey:
що колишній повертає локалізоване значення (якщо воно є). Напевно, тут нічого не зміниться;)
Короткий спосіб отримати рядок версії у форматі XYZ :
[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]
Або лише для XY:
[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]
Обидва ці фрагменти повертають рядки, які ви б призначили властивості тексту вашого об’єкта мітки, наприклад
myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Ви можете спробувати використовувати словник як: -
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Прочитайте файл info.plist програми та отримайте значення для ключового CFBundleShortVersionString. Читання info.plist дасть вам об’єкт NSDictionary
Ви можете скористатись інформаційним словником, який отримує детальну інформацію про версію з інформаційного списку програми. Цей код працює для швидкого 3. Просто зателефонуйте до цього методу та відображіть версію в будь-якому бажаному елементі інтерфейсу.
Swift-3
func getVersion() -> String {
let dictionary = Bundle.main.infoDictionary!
let version = dictionary["CFBundleShortVersionString"] as! String
let build = dictionary["CFBundleVersion"] as! String
return "v\(version).\(build)"
}
Швидкий 5:
Є дві речі - версія додатка та версія збірки
Щоб отримати версію програми:
if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
// present appVersion
}
Щоб отримати версію Build:
if let buildVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
// present buildVersion
}
Спасибі @Brad Larson♦
велике
Якщо вам потрібна комбінація як версії, так і кількості збірки , ось короткий шлях за допомогою Swift 3 :
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]!
let versionInfo = "\(appVersion) (build \(buildNum))"
// versionInfo is now something like "2.3.0 (build 17)"
Додайте as! String
до кінця appVersion
або buildNum
рядка, або для отримання лише тієї частини як String
об’єкта. Немає потреби в цьому, хоча ви шукаєте повнеversionInfo
.
Я сподіваюся, що це допомагає!
func getAppVersion() -> String {
let dictionary = Bundle.main.infoDictionary!
let versionValue = dictionary["CFBundleShortVersionString"] ?? "0"
let buildValue = dictionary["CFBundleVersion"] ?? "0"
return "\(versionValue) (build \(buildValue))"
}
На основі @rajat chauhan відповідь без примусового кидання на String
.
Це добре, щоб впоратися із системою контролю ревізії. Таким чином, коли ви отримуєте звіт про помилку від користувача, ви можете перевірити, чи є перегляд коду, і (сподіваємось) відтворити помилку з таким самим кодом, що і користувач.
Ідея полягає в тому, що кожного разу, коли ви будуєте збірку, ви запускаєте сценарій, який отримує поточний номер версії вашого коду та оновлює файл у вашому проекті (як правило, з певною формою заміни лексеми). Потім ви можете написати процедуру обробки помилок, яка завжди включає номер виправлення у висновку про помилку, або ви можете відобразити її на сторінці "Про".