Comportamiento extraño al recuperar CFBundleVersion

Posible duplicado:
El "Número de compilation" del proyecto Xcode

Estoy usando este script para actualizar CFBundleVersion durante la compilation en Xcode 4.5.2 (aplicación para iOS):

#!/bin/bash buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" 

Parece que funciona bien y cada vez que genero el "número de compilation" de mi aplicación (CFBundleVersion) aumenta en 1.

El comportamiento extraño ocurre cuando bash recuperar CFBundleVersion mediante progtwigción mediante:

 [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] 

o

 [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] 

Y esto es lo que obtengo:

 CFBundleVersion 1 -> I get 1 CFBundleVersion 2 -> I get 1 odd CFBundleVersion 3 -> I get 3 CFBundleVersion 4 -> I get 3 odd CFBundleVersion 5 -> I get 5 CFBundleVersion 6 -> I get 5 odd CFBundleVersion 7 -> I get 7 CFBundleVersion 8 -> I get 7 odd CFBundleVersion 9 -> I get 9 CFBundleVersion 10 -> I get 10 CFBundleVersion 11 -> I get 10 odd CFBundleVersion 12 -> I get 12 CFBundleVersion 13 -> I get 13 CFBundleVersion 14 -> I get 14 CFBundleVersion 15 -> I get 14 odd CFBundleVersion 16 -> I get 16 CFBundleVersion 17 -> I get 16 odd CFBundleVersion 18 -> I get 18 CFBundleVersion 19 -> I get 18 odd CFBundleVersion 20 -> I get 20 CFBundleVersion 21 -> I get 21 CFBundleVersion 22 -> I get 22 and so on... 

Las salidas cambian cada vez, pero el comportamiento extraño persiste en el simulador y en el dispositivo. Si elimino el script y pongo manualmente CFBundleVersion en su lugar, todo va bien.

¿Alguien sabe por qué? ¿Y cómo puedo solucionarlo? ¡¡¡Gracias!!!

El problema es que Xcode ya no verifica los files modificados después de ejecutar el script de ejecución. Por lo tanto, incluso si el script de ejecución actualiza el file Info.plist, Xcode no copy el file actualizado en el package de aplicaciones.

Como solución alternativa, puede crear un objective adicional (es decir, un objective "agregado") a su proyecto y agregar el script de ejecución a ese objective adicional, en lugar de su objective principal.

La variable de entorno $INFOPLIST_FILE no está definida para el objective adicional, pero puede usar la ruta real (relativo al proyecto), es decir, replace $INFOPLIST_FILE por

 YourMainTarget/YourMainTarget-Info.plist 

Luego, arrastre el objective adicional a las "Dependencias de destino" de su objective principal, de modo que el objective adicional siempre se construya primero.

EDIT: Acabo de encontrar una solución más elegante aquí: https://stackoverflow.com/a/11112042/1187415 , usando una secuencia de commands "Pre-action" en lugar de un objective adicional.