Es fácil establecer los números de compilación y de versión manualmente en Xcode, y aprendí cómo incrementarlos con una macro en tiempo de compilación. ¿Pero cómo hago referencia a sus valores en el código?Consulte el número de versión o número de versión en el código
Respuesta
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"];
¡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
@RobertL En este caso, podría votar sus respuestas para darles cierta reputación. – JustSid
Eso hizo. No sabía que podría hacer eso hasta ahora. Gracias. – RobertL
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"]
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42
¿Está esto documentado en algún lugar de los documentos de Apple? ¡Gracias! – snowbound
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. –
NSBundle *bundle = [NSBundle mainBundle];
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
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.
@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"
muchas gracias. (10char) – phlebotinum
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
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
En Swift:
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
- 1. ¿De dónde viene el número de versión?
- 2. Número de versión .NET (versión del instalador)
- 3. Encontrar el número de versión de Eclipse
- 4. Incremente el número de versión en el instalador avanzado
- 5. Fuente política de número de versión de código
- 6. Número de versión en el texto de formulario de Winform
- 7. java.lang.UnsupportedClassVersionError: ¿número de versión incorrecto en el archivo .class?
- 8. Comparación del número de versión en Python
- 9. SBT incluyendo el número de versión en un programa
- 10. Subir el número de versión inferior de la aplicación
- 11. Cómo encontrar el número de versión de libxxx.a
- 12. Jerarquía de proyectos maven sin dispersar el número de versión
- 13. Cómo configurar el "número de versión" actual de las migraciones?
- 14. Encontrar el número de versión de la aplicación en el código
- 15. Buscar la última versión de RVM número
- 16. ¿Cómo obtener el número de versión de JavaFX?
- 17. ¿Número de versión o marca de tiempo para concurrencia optimista?
- 18. ¿Dónde almacena el número de versión de la aplicación Rails?
- 19. Cómo obtener el número de versión de bash
- 20. una expresión regular para analizar el número de versión
- 21. Dónde definir el número de versión de la aplicación Rails
- 22. Cómo encontrar el número de versión de Django-CMS
- 23. Versión vs número Distrib de MySQL
- 24. guerra griales sin número de versión
- 25. TeamCity para leer y actualizar el número de versión del archivo de versión
- 26. C#: cómo establecer el número de versión del ensamblaje
- 27. ¿Cómo obtener el número de versión del sistema operativo?
- 28. get_git_version no puede encontrar el número de versión
- 29. ¿Cómo obtengo el número de versión de un módulo de Python a través del código?
- 30. Obteniendo el número del repositorio de subversión en el código
tienes una referencia/enlace sobre cómo autocreate #s versión? – phlebotinum
@robo vea mi "respuesta" a continuación. – RobertL