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?
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?
Respostas:
Você pode ler seu Info.plist como um dicionário com
[[NSBundle mainBundle] infoDictionary]
E você pode facilmente obter a versão na CFBundleVersion
chave dessa forma.
Finalmente, você pode obter a versão com
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
, uma vez que retorna o valor localizado, se disponível:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
foi reaproveitado para ser Build e Version é CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
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)")
}
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);
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];
}
Swift 3:
let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String