Quiero leer la información de la versión del paquete de Info.plist en mi código, preferiblemente como una cadena. ¿Cómo puedo hacer esto?
Quiero leer la información de la versión del paquete de Info.plist en mi código, preferiblemente como una cadena. ¿Cómo puedo hacer esto?
Respuestas:
Puede leer su Info.plist como un diccionario con
[[NSBundle mainBundle] infoDictionary]
Y puede obtener fácilmente la versión en la CFBundleVersion
clave de esa manera.
Finalmente, puede obtener la versión con
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
en su lugar, ya que devuelve el valor localizado si está disponible:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
ha sido reutilizado para ser Build y Version is CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
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)")
}
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);
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 kCFBundleVersionKey
se 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];
}
Swift 3:
let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String