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.