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"];

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)")
}

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);

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];
    }

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.