Leer la versión de Info.plist

Respuestas:

201

Puede leer su Info.plist como un diccionario con

[[NSBundle mainBundle] infoDictionary]

Y puede obtener fácilmente la versión en la CFBundleVersionclave de esa manera.

Finalmente, puede obtener la versión con

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
gcamp
fuente
Perfecto. Eso es mucho más simple que todas las líneas de funciones CF * que estaba usando ... Estaba seguro de que debía haber una forma rápida de obtener el NSDictionary.
Estofado
16
Para el número de versión, esto no importa, pero para otras claves es posible que desee utilizar objectForInfoDictionaryKey:en su lugar, ya que devuelve el valor localizado si está disponible:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony
20
Tenga en cuenta que en Xcode4 si observa el panel de resumen del objetivo, verá los campos Versión y compilación. CFBundleVersionha sido reutilizado para ser Build y Version is CFBundleShortVersionString.
memmons
5
Esto buscará tanto la versión como el número de compilación, y los formateará 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 clave para el método objectForKey.
ayalcinkaya
11

para los usuarios de Swift:

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

para los usuarios de Swift3:

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

Sé que ha pasado algún tiempo desde la búsqueda y la respuesta.

Desde iOS8, la respuesta aceptada podría no funcionar.

Esta es la nueva forma de hacerlo ahora:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
Michael Kessler
fuente
6
¿Tiene un enlace a por qué esto es así?
Ian Warburton
4

Ahora en iOS 8 ambos campos son necesarios. Anteriormente, funciona sin CFBundleShortVersionString. Pero ahora es un campo plist obligatorio para enviar cualquier aplicación en la tienda de aplicaciones. Y kCFBundleVersionKeyse compara para cargar cada nueva compilación, que debe estar en orden incremental. Especialmente para compilaciones de TestFlight. Lo hago de esta manera

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }
karim
fuente
Gracias .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; trabajó para mí
swiftBoy
3

Swift 3:

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