¿Mejor forma de incrementar el número de compilación?
He estado usando un script de shell como parte de mi proceso de compilación de Xcode para incrementar el número de compilación dentro del archivo plist , sin embargo, hace que Xcode 4.2.1 falle con frecuencia (con un error acerca de que el objetivo no pertenece a un proyecto; supongo el cambio del archivo plist confunde a Xcode de alguna manera).
El script de shell hizo esto para que el número de compilación solo se incremente agvtool
cuando un archivo sea más nuevo que el archivo plist (por lo que la simple compilación no incrementó el valor):
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi
¿Hay alguna manera de incrementar el número de compilación (en el archivo plist o en cualquier otro lugar) que no rompa Xcode?
EDICIÓN FINAL : ahora hago este tipo de cosas usando un script en Python que acabo de hacer público en github . No está bien documentado, pero no debería ser difícil resolverlo. Como beneficio adicional, este repositorio también contiene un script útil para agrupar automáticamente la biblioteca de terceros en un paquete de aplicación.
He jugado con muchas de las respuestas a esta pregunta y ninguna me satisfizo del todo. Sin embargo, ¡finalmente se me ocurrió una mezcla que realmente me gusta!
Simplemente configuramos el número de versión del producto creado en el número de confirmaciones de Git. Esto no afectará su control de fuente, ya que el script solo muta el producto construido.
Agregue esta fase de compilación "Ejecutar script" al final de sus fases de compilación:
if [ "${CONFIGURATION}" = "Release" ]; then
buildNumber=$(git rev-list --count head)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
Configure su versión de Info.plist en su proyecto como desee; nunca se utilizará al crear una versión de lanzamiento. Configuré el mío en AUTOMATED
aproximadamente DEVELOPMENT
para que quede claro cuando estoy ejecutando una compilación de desarrollo.
¡Eso es todo! La aplicación creada tendrá un número de compilación en constante aumento. (Siempre y cuando siempre hagas tus compilaciones desde la misma rama).
Por qué me gusta este método:
- Fácil
- No contamina el historial de versiones de Git
- CFBundleVersion es totalmente automático
- El bonito número de versión se puede modificar cuando quiera.
Otras notas:
- Si tiene extensiones de aplicación en su proyecto, simplemente configure el mismo script de compilación también en esos objetivos. Esto mantendrá todos los números de versión automatizados y sincronizados. La App Store requiere que las versiones de extensión coincidan con su aplicación principal.
He usado esta lista. Funciona como se esperaba. https://gist.github.com/sekati/3172554 (todo el crédito va al autor original)
Scripts que fui modificando con el tiempo.
xcode-versionString-generator.sh ,
xcode-build-número-generador.sh
Como estos elementos esenciales están ayudando a la comunidad de desarrolladores, hice un proyecto GitHub a partir de ellos. Así que desarrollémoslo bien. Aquí está el proyecto GitHub: https://github.com/alokc83/Xcode-build-and-version-generator
He actualizado un poco el código para ambos scripts para mejorarlo. en lugar de usar a continuación, obtenga lo último de GitHub
Para la versión:
# xcode-version-bump.sh
# @desc Auto-increment the version number (only) when a project is archived for export.
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Check the checkbox "Run script only when installing"
# 6. Drag the "Run Script" below "Link Binaries With Libraries"
# 7. Insure your starting version number is in SemVer format (e.g. 1.0.0)
# This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position.
VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'`
NEWSUBVERSION=$(($NEWSUBVERSION + 1))
NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"
Para construir:
# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run.
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below into new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Ensure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"