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

Я хочу прочитать информацию о версии пакета из Info.plist в мой код, желательно в виде строки. Как я могу это сделать?

5 ответов


вы можете прочитать вашу информацию.plist как словарь с

[[NSBundle mainBundle] infoDictionary]

и вы можете легко получить версию на CFBundleVersion ключ таким образом.

наконец, вы можете получить версию с

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

для пользователей 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)")
}

Я знаю, что прошло некоторое время с момента задания и ответа.

поскольку iOS8 принятый ответ может не работать.

Это новый способ сделать это так:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);

Теперь в iOS 8 необходимы оба поля. Ранее он работает без CFBundleShortVersionString. Но теперь это обязательное поле plist для отправки любого приложения в app store. И kCFBundleVersionKey сравнивается для загрузки каждой новой сборки, которая должна быть в последовательный порядок. Специально для TestFlight строит. Я делаю это так:

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

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String