2012-04-04 26 views

Respuesta

67

Sin duda, puede preguntar a su haz principal para el directorio de información que incluye todas las claves y los valores de su info.plist, incluyendo el número de versión:

NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; 
NSString *version = [info objectForKey:@"CFBundleShortVersionString"]; 
+1

¡Guau 5 buenas respuestas dentro de los 12 minutos posteriores a la publicación de la pregunta! Todos merecen un cheque verde, pero solo puedo aceptar uno, así que tomo el que tiene la fecha más temprana. – RobertL

+0

@RobertL En este caso, podría votar sus respuestas para darles cierta reputación. – JustSid

+0

Eso hizo. No sabía que podría hacer eso hasta ahora. Gracias. – RobertL

3

Puede obtener valores Info.plist con esta pieza de código (sustituir CFBundleShortVersionString con las llaves de su info.plist desea cf. Recommended Info.plist Keys)

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] 
77
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; 
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0 
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 
+0

¿Está esto documentado en algún lugar de los documentos de Apple? ¡Gracias! – snowbound

+0

https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html documenta las claves que pueden estar en una aplicación (bueno, cualquier paquete en realidad) Info.plist, incluidas estas dos. –

10
NSBundle *bundle = [NSBundle mainBundle]; 
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"]; 
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 
3

Dado que esos valores se almacenan en Info.plist de su aplicación se puede leer a continuación, a través de los métodos proporcionados en NSBundle:

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString]; 

Ver Accessing bundles contents como la referencia autorizada sobre la obtención de datos de su archivo Info.plist y Core Foundation keys a disposición Info.plist llaves.

13

@robo Seguí un artículo sobre cómo autoincrementar el número de compilación (no el número de versión, pero eso es muy similar) pero ahora no puedo encontrarlo. Trataré de explicar lo que hice. Espero que esté lo suficientemente claro como para seguirlo.

En Xcode 4, busque en el panel del navegador, que es el panel en el lado izquierdo de la pantalla de Xcode. Tiene 7 iconos en la parte superior. Seleccione el ícono más a la izquierda (se parece a una carpeta de archivos) para obtener el panel de Project Navigator.

Ahora haga clic en el primer elemento de ese panel, que es el proyecto en sí. Eso abre una ventana grande en el centro con una columna estrecha a la izquierda.

La columna estrecha tiene 2 secciones: "PROYECTO" Y "OBJETIVOS". Haga clic en el nombre de su proyecto en la sección "OBJETIVOS". Ahora el panel central tiene 5 pestañas en la parte superior: "Resumen", "Información", "Configuración de compilación", "Fases de compilación" y "Reglas de compilación".

Haga clic en la pestaña "Crear fases". Si su configuración es la misma que la mía, ahora verá 4 secciones en la ventana principal: "Dependencias de destino", "Recursos de paquete de copia", "Fuentes de compilación" y "Enlace ...". Haga clic en "Agregar fase de creación" (en la esquina inferior derecha) y elija "Agregar secuencia de comandos de ejecución". Ahora aparece una 5ª sección en el panel central con el título "Ejecutar script". Arrastra la sección "Ejecutar script" hacia arriba para que sea la segunda sección desde la parte superior, justo debajo de "Dependencias de destino".

Ahora haga clic en el triángulo desplegable para la sección Ejecutar script. Eso abre una ventana donde puedes poner un script. Copie y pegue la siguiente secuencia de comandos en esa ventana.

#!/bin/bash  
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
bN=$((0x$bN)) 
bN=$(($bN + 1)) 
bN=$(printf "%X" $bN) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE" 

Asegúrese de que "Ejecutar script solamente cuando se instala" NO ESTÁ COMPROBADO.

Eso es todo! Ahora su número de compilación se incrementa automáticamente cada vez que crea su proyecto.

Este script supone que tiene un número de compilación hex simple en su archivo info.plist y lo incrementa como hexadecimal. No estoy seguro de qué hace si falta el número de compilación.Pero es fácil ingresar un valor inicial, solo vaya a la pestaña "Resumen" en el mismo panel central que estaba usando arriba e ingrese "1" (o el valor que desee) en el cuadro "Crear" (pero no en formato cadena como 1.0).


Creo que el script hexadecimal que di primero no es válido para enviarlo a la tienda de aplicaciones. Aquí está el mismo script que usa aritmética decimal.

#!/bin/bash  
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
((bN += 1)) 
bN=$(printf "%d" $bN) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE" 
+0

muchas gracias. (10char) – phlebotinum

+0

Para mi sorpresa, he aprendido que los números de la versión hexadecimal no pasan la validación de la App Store. Estoy publicando una respuesta a continuación con una versión revisada de la secuencia de comandos que hace la aritmética decimal. Vea abajo. – RobertL

+0

Seguí adelante y edité en su secuencia de comandos decimal hasta el final de esta respuesta. De esa forma, la otra respuesta puede eliminarse, reduciendo un poco el desorden. – thegrinner

0

En Swift:

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String 
Cuestiones relacionadas