Прочитайте версію з Info.plist


Відповіді:


201

Ви можете прочитати ваш Info.plist як словник за допомогою

[[NSBundle mainBundle] infoDictionary]

І ви можете легко отримати версію за CFBundleVersionключем таким чином.

Нарешті, ви можете отримати версію з

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

Ідеально Це набагато простіше, ніж усі рядки функцій CF *, якими я користувався ... Я був впевнений, що мав бути швидкий спосіб отримати NSD Dictionary.
Рагу

16
Для номера версії це не має значення, але для інших клавіш ви можете скористатися objectForInfoDictionaryKey:замість них, оскільки він повертає локалізоване значення, якщо воно доступне:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony

20
Зверніть увагу на Xcode4, якщо ви подивитеся на панель підсумків цілі, ви побачите поля Версія та побудова. CFBundleVersionбуло змінено на "Збірка" та "Версія" CFBundleShortVersionString.
memmons

5
Це призведе до версії та номера збірки та відформатує їх разом: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Грем Перкс

використовувати CFBundleShortVersionString як ключ для методу objectForKey.
ayalcinkaya

11

для користувачів Swift:

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
У вас є посилання на те, чому це так?
Ian Warburton,

4

Тепер у iOS 8 обоє поля необхідні. Раніше це працювало без CFBundleShortVersionString. Але зараз це необхідне поле plist, щоб подати будь-яку програму в магазин додатків. І kCFBundleVersionKeyпорівнюється для завантаження кожної нової збірки, яка повинна бути поступовим. Спеціально для збірок TestFlight. Я роблю це так,

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

Дякуємо .. версія = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; працював у мене
swiftBoy

3

Свіфт 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.