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

votos
237

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 objetivo C de averiguar cuál es la versión de mi aplicación?

Publicado el 19/01/2009 a las 19:32
fuente por usuario
En otros idiomas...                            


15 respuestas

votos
216

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

Respondida el 19/01/2009 a las 20:00
fuente por usuario

votos
143

Sobre la base de la respuesta de Brad Larson, si tiene versión principal y secundaria información almacenada en la información plist (como lo 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 se acelera una versión menor manualmente puede ser un dolor, por lo que el uso de un truco fuente repositorio número de revisión es ideal. Si no ha atado que (como yo no tenía), el fragmento anterior puede ser útil. También saca nombre de visualización de la aplicación.

Respondida el 15/08/2012 a las 05:13
fuente por usuario

votos
46

Versión rápida 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

Su incluido en este repo, echa un vistazo:

https://github.com/goktugyil/EZSwiftExtensions

Respondida el 19/03/2015 a las 12:42
fuente por usuario

votos
41

Esto es lo que hice en mi solicitud

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

Esperemos que esta respuesta simple ayudará a alguien ...

Respondida el 02/11/2013 a las 21:01
fuente por usuario

votos
31

Puede especificar la CFBundleShortVersionStringcadena en su plist.info y leerla programáticamente usando la API provista .

Respondida el 19/01/2009 a las 19:46
fuente por usuario

votos
29

Hay dos cosas - la construcción de la versió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 Build:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
Respondida el 23/01/2015 a las 09:01
fuente por usuario

votos
17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Respondida el 23/07/2014 a las 19:15
fuente por usuario

votos
16

Una manera sucinta para obtener una cadena de versión en XYZ formato es:

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

O, por sólo XY:

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

Ambos de estos fragmentos devuelve cadenas que se asignaría a la propiedad de texto de su objeto de etiqueta, por ejemplo,

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Respondida el 07/09/2013 a las 03:58
fuente por usuario

votos
7

Puedes probar a utilizar diccionario como: -

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Respondida el 15/05/2014 a las 10:58
fuente por usuario

votos
4

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

Respondida el 22/01/2009 a las 06:05
fuente por usuario

votos
1

Si necesita una combinación de ambos versión y construir num , aquí hay un camino corto utilizando 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 una as! Stringa finales de o bien el appVersiono buildNumla cola para conseguir únicamente la parte como un Stringobjeto. No hay necesidad de que a pesar de si usted está buscando para el pleno versionInfo.

¡Espero que esto ayude!

Respondida el 21/12/2016 a las 06:35
fuente por usuario

votos
0
func getAppVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let versionValue = dictionary["CFBundleShortVersionString"] ?? "0"
    let buildValue = dictionary["CFBundleVersion"] ?? "0"
    return "\(versionValue) (build \(buildValue))"
}

Sobre la base de @rajat respuesta chauhan sin forzada a emitir String.

Respondida el 10/04/2019 a las 10:42
fuente por usuario

votos
0

Puede probar este método:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Respondida el 24/10/2017 a las 15:15
fuente por usuario

votos
0

Se puede utilizar el infoDictionary que consiga los detalles de la versión de info.plist de ustedes aplicación. Este código funciona para SWIFT 3. Sólo tiene que llamar este método y mostrar la versión en cualquier elemento de la interfaz de usuario 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)"
}
Respondida el 31/07/2017 a las 09:31
fuente por usuario

votos
0

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".

Respondida el 19/01/2009 a las 19:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more