J'ai été en utilisant un script shell dans le cadre de mon Xcode processus de construction d'incrémenter le numéro de version dans le fichier plist fichier, mais il fait Xcode 4.2.1 tomber souvent en panne (avec une erreur sur la cible n'appartenant pas à un projet; j'imagine que l'évolution de la plist fichier est source de confusion Xcode en quelque sorte).
Le script shell a fait pour que le numéro de version est incrémenté uniquement par agvtool
lorsqu'un fichier est plus récent que le fichier plist fichier (il suffit donc de bâtiment n'a pas incrémenter la valeur):
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi
Est-il possible d'incrémenter le numéro de version (dans le plist fichier ou n'importe où ailleurs) qui ne se casse pas Xcode?
EDIT: Voici ma dernière solution, basée sur la suggestion de @Monolo. J'ai créé le script suivant dans l' ${PROJECT_DIR}/tools
(frère de l' .xcodeproj
directory):
#!/bin/sh
if [ $# -ne 1 ]; then
echo usage: $0 plist-file
exit 1
fi
plist="$1"
dir="$(dirname "$plist")"
# Only increment the build number if source files have changed
if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist")
if [ -z "$buildnum" ]; then
echo "No build number in $plist"
exit 2
fi
buildnum=$(expr $buildnum + 1)
/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist"
echo "Incremented build number to $buildnum"
else
echo "Not incrementing build number as source files have not changed"
fi
EDIT 2: j'ai modifié le script pour intégrer @Milliways suggestion.
J'ai ensuite invoqué le script à partir de Xcode cible "Phases de construction" de la section:
EDIT 3: Comme par @massimobio réponse, vous aurez besoin d'ajouter des guillemets autour de la plist argument s'il contient des espaces.
EDIT 4: il suffit de mettre à jour que ma méthode de prédilection de l'appel de ce script de construction est désormais de créer une cible et rendre l'application de la cible dépend de cette Bosse le Numéro de Build de la cible. Ceci assure que c'est invoquée avant l'application cible n' importe quoi avec le fichier plist (j'ai remarqué qu'il aime processus plist au début de la construction). J'ai aussi opté pour une approche purement basée sur python solution qui maintient le numéro de version dans un fichier séparé, et écrit la version des fichiers source, ce qui est plus utile pour la croix-plate-forme de produits (par exemple Visual Studio sous Windows peut invoquer le script, et, évidemment, cmake/faire-type construit peut le faire aussi). Ceci a l'avantage que le numéro de build est toujours le même, même sous différentes plates-formes, et il est également possible de mettre à jour Visual Studio Resource.rc
le fichier avec la version actuelle/construire ainsi.