¿Cómo puede mi aplicación para iPhone detectar su propio número de versión?

Estoy escribiendo una aplicación para iPhone. Ya ha sido publicado, pero me gustaría agregar una función donde se muestra su número de versión.

Prefiero no tener que hacer esto manualmente con cada versión que publico …

¿Hay alguna manera en el objective C de averiguar cuál es la versión de mi aplicación?

Como describo aquí , utilizo un script para reescribir un archivo de encabezado con mi número de revisión de Subversion actual. Ese número de revisión se almacena en la constante kRevisionNumber. A continuación, puedo acceder a la versión y al número de revisión usando algo similar a lo siguiente:

[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber] 

que creará una cadena del formato “Versión 1.0 (51)”.

Sobre la base de la respuesta de Brad Larson, si tiene información de versión mayor y menor almacenada en la información (como hice en un proyecto en particular), esto funcionó bien para mí:

 - (NSString *)appNameAndVersionNumberDisplayString { NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"]; NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"]; NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"]; return [NSString stringWithFormat:@"%@, Version %@ (%@)", appDisplayName, majorVersion, minorVersion]; } 

Ahora acelerar una versión menor manualmente puede ser complicado, por lo que es ideal usar un truco con el número de revisión del repository fuente. Si no has vinculado eso (como no lo hice), el fragmento de arriba puede ser útil. También saca el nombre para mostrar de la aplicación.

Swift versión para ambos por separado:

Swift 3

 let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String 

Swift 2

 let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String 

Está incluido en este repository, compruébalo:

https://github.com/goktugyil/EZSwiftExtensions

Esto es lo que hice en mi aplicación

 NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

Espero que esta simple respuesta ayude a alguien …

Puede especificar la cadena CFBundleShortVersionString en su plist.info y leerla programáticamente utilizando la API provista .

Hay dos cosas: versión de comstackción y versión de la aplicación.

  1. Para obtener la versión de la aplicación:

     NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
  2. Para obtener la versión de comstackción:

     NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
 // Syncs with App Store and Xcode Project Settings Input NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 

Una forma concisa de obtener una cadena de versión en formato XYZ es:

 [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"] 

O solo por XY:

 [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"] 

Ambos fragmentos devuelven las cadenas que asignaría a la propiedad de texto del objeto de etiqueta, por ej.

 myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]; 

Puedes intentar usar el diccionario como: –

 NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary]; NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey]; NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey] 

Lea el archivo info.plist de su aplicación y obtenga el valor de la clave CFBundleShortVersionString. Leer info.plist le dará un objeto NSDictionary

Puede usar infoDictionary que obtiene los detalles de la versión de info.plist de su aplicación. Este código funciona para Swift 3. Simplemente llame a este método y visualice la versión en cualquier elemento UI preferido.

 Swift-3 func getVersion() -> String { let dictionary = Bundle.main.infoDictionary! let version = dictionary["CFBundleShortVersionString"] as! String let build = dictionary["CFBundleVersion"] as! String return "v\(version).\(build)" } 

Si necesita una combinación de ambas versiones y comstackción num , aquí hay una forma breve de usar Swift 3 :

 let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]! let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]! let versionInfo = "\(appVersion) (build \(buildNum))" // versionInfo is now something like "2.3.0 (build 17)" 

Añadir un as! String as! String hasta el final de la línea appVersion o buildNum para obtener solo esa parte como un objeto String . Sin embargo, no es necesario si estás buscando la versionInfo completa.

¡Espero que esto ayude!

Esto es algo bueno de manejar con un sistema de control de revisiones. De esta forma, cuando recibe un informe de error de un usuario, puede verificar esa revisión del código y (con suerte) reproducir el error que ejecuta exactamente el mismo código que el usuario.

La idea es que cada vez que realice una construcción, ejecute un script que obtenga el número de revisión actual de su código y actualice un archivo dentro de su proyecto (generalmente con algún tipo de reemplazo de token). Luego puede escribir una rutina de manejo de errores que siempre incluye el número de revisión en la salida del error, o puede mostrarla en una página “Acerca de”.

Puedes probar este método:

 NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];