Leia a versão em Info.plist

91

Quero ler as informações da versão do pacote de Info.plist em meu código, de preferência como uma string. Como posso fazer isso?

John smith
fonte

Respostas:

201

Você pode ler seu Info.plist como um dicionário com

[[NSBundle mainBundle] infoDictionary]

E você pode facilmente obter a versão na CFBundleVersionchave dessa forma.

Finalmente, você pode obter a versão com

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
gcamp
fonte
Perfeito. Isso é muito mais simples do que todas as linhas de funções CF * que eu estava usando ... Eu tinha certeza de que devia haver uma maneira rápida de obter o NSDictionary.
Ensopado,
16
Para o número da versão, isso não importa, mas para outras chaves você pode querer usar objectForInfoDictionaryKey:, uma vez que retorna o valor localizado, se disponível:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony
20
Observe que no Xcode4, se você olhar o painel de resumo do destino, verá os campos Versão e Compilação. CFBundleVersionfoi reaproveitado para ser Build e Version é CFBundleShortVersionString.
memmons de
5
Isso irá buscar a versão e o número da compilação e formatá-los juntos: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks
use CFBundleShortVersionString como chave para o método objectForKey.
ayalcinkaya
11

para usuários Swift:

if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
    print("version is : \(version)")
}

para usuários Swift3:

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
    print("version is : \(version)")
}
Ayalcinkaya
fonte
5

Eu sei que já se passou algum tempo desde a busca e a resposta.

Desde iOS8, a resposta aceita pode não funcionar.

Esta é a nova maneira de fazer isso agora:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
Michael Kessler
fonte
6
Você tem um link para explicar por que isso acontece?
Ian Warburton
4

Agora, no iOS 8, os dois campos são necessários. Anteriormente, ele funcionava sem o CFBundleShortVersionString. Mas agora é um campo plist obrigatório para enviar qualquer aplicativo na app store. E kCFBundleVersionKeyé comparado para fazer upload de cada nova construção, que deve ser em ordem incremental. Especialmente para compilações TestFlight. Eu faço assim,

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }
karim
fonte
Obrigado .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; funcionou para mim
swiftBoy de
3

Swift 3:

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