2010-10-30 18 views

Respuesta

193

Puede leer su Info.plist como un diccionario con

[[NSBundle mainBundle] infoDictionary] 

Y usted puede conseguir fácilmente la versión en el CFBundleVersion clave de esa manera.

Por último, se puede obtener la versión con

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary]; 
NSString* version = [infoDict objectForKey:@"CFBundleVersion"]; 
+0

perfecto. Eso es mucho más simple que todas las líneas de funciones de CF * que estaba usando ... Estaba seguro de que debe haber habido una forma rápida de obtener NSDictionary. Para – Stew

+16

el número de versión, esto no tiene importancia, pero para otras teclas es posible que desee utilizar 'objectForInfoDictionaryKey:' en lugar, ya que devuelve el valor localizado si está disponible: '[[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleDisplayName"]' – Zargony

+20

Nota en Xcode4 si observa el panel de resumen del objetivo, verá los campos Versión y Compilación. 'CFBundleVersion' ha sido reutilizado para ser Build y la versión es' CFBundleShortVersionString'. – memmons

4

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í? –

3

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

NSString * version = nil; 
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 
    if (!version) { 
     version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 
    } 
+0

Gracias .. ** version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; ** trabajó para mí – swiftBoy

+0

@RDC gracias. –

6

para los usuarios Swift:

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

para los usuarios Swift3:

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

Swift 3:

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