J'utilise un script Shell dans le cadre de mon processus de compilation Xcode pour incrémenter le numéro de build dans le fichier plist, mais cela provoque un crash fréquent de Xcode 4.2.1 (avec une erreur concernant la cible n'appartenant à aucun projet; je suppose que la modification du fichier plist confond quelque peu Xcode).
Le script Shell a agi de la sorte pour que le numéro de version ne soit incrémenté que de agvtool
lorsqu'un fichier est plus récent que le fichier plist (ainsi, la construction ne incrémente pas la valeur):
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi
Existe-t-il un moyen d’incrémenter le numéro de build (dans le fichier plist, ou ailleurs) sans casser Xcode?
EDIT: Voici ma solution finale, basée sur la suggestion de @Monolo. J'ai créé le script suivant dans ${PROJECT_DIR}/tools
(frère du répertoire .xcodeproj
):
#!/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 incorporer la suggestion de @Milliways.
J'ai ensuite appelé le script à partir de la section 'Build Phases' de la cible Xcode:
EDIT 3: Selon la réponse de @ massimobio, vous devrez ajouter des guillemets autour de l'argument Plist s'il contient des espaces.
EDIT 4: Juste pour indiquer que ma méthode préférée pour invoquer ce script de génération consiste maintenant à créer une cible distincte et à rendre la cible de l'application dépendante de cette cible numéro de composition en bloc. Cela garantit qu'il est appelé avant que la cible de l'application ne rien avec le plist (j'ai remarqué qu'elle aime traiter le plist au début de la construction). J'ai également opté pour une solution purement python qui conserve le numéro de version dans un fichier séparé et écrit les fichiers source de la version, ce qui est plus utile pour les produits multiplates-formes (c’est-à-dire que Visual Studio sous Windows peut invoquer le script et évidemment, les constructions de type cmake/make peuvent le faire aussi). Cela présente l'avantage que le numéro de version est toujours le même, même sous différentes plates-formes, et qu'il est également possible de mettre à jour le fichier Visual Studio Resource.rc
avec la version/construction actuelle.
Here est le script python que j'utilise actuellement pour mettre à jour les fichiers Info.plist
dans le projet Xcode.
Si je comprends bien votre question, vous souhaitez modifier le fichier Project-Info.plist
, qui fait partie du modèle de projet standard de Xcode?
La raison pour laquelle je pose cette question est que Project-Info.plist
est normalement sous contrôle de version, et sa modification signifie qu'il sera marqué comme étant, ainsi, modifié.
Si cela vous convient, l'extrait suivant met à jour le numéro de build et marque le fichier comme modifié dans le processus, où get_build_number
est un script (c'est-à-dire un espace réservé dans cet exemple) pour obtenir le numéro de construction (éventuellement incrémenté) que vous voulez utiliser:
#!/bin/sh
# get_build_number is a placeholder for your script to get the latest build number
build_number = `get_build_number`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist
PlistBuddy vous permet de définir n'importe quelle clé dans un fichier plist, pas seulement le numéro de version. Vous pouvez créer tous les fichiers plist que vous voulez et les inclure dans les ressources si nécessaire. Ils peuvent ensuite être lus à partir du paquet.
Pour ce qui est de votre besoin d’afficher la version dans le volet À propos de et dans d’autres emplacements, vous pouvez également examiner le paramétrage de CFBundleGetInfoString
et CFBundleShortVersionString
.
J'ai malmené beaucoup de réponses à cette question, et aucune d'entre elles ne m'a satisfait. Cependant, j'ai finalement trouvé un mélange que j'aime beaucoup!
Il y a deux étapes, une au début et une à la fin de vos phases de construction.
Au début:
# Set the build number to the count of Git commits
buildNumber=$(git rev-list HEAD | wc -l | tr -d ' ')
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
À la fin:
# Set the build number to "DEVELOPMENT"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"
En regardant Info.plist dans Xcode, vous verrez que le numéro de version est "DEVELOPMENT", mais que l'application construite aura un numéro de construction en augmentation constante. (Tant que vous faites toujours vos constructions à partir de la même branche.)
Définir le numéro de version sur une chaîne constante à la fin empêche le fichier Info.plist d'être modifié par la construction de l'application.
Pourquoi j'aime cette méthode:
J'ai utilisé cette glist sa génial et fonctionne comme prévu. https://Gist.github.com/sekati/3172554 (tout le crédit revient à l'auteur original)
Sctipts que j'ai modifié au fil du temps.
xcode-versionString-generator.sh ,
xcode-build-number-generator.sh
En tant que ces Gist aident la communauté de développement. Je pensais en faire un projet github. Alors développons-le bien. Voici le projet github: https://github.com/alokc83/Xcode-build-and-version-generator
J'ai mis à jour le code pour les deux scripts d'amélioration. au lieu d’utiliser ci-dessous, prenez le dernier de github
Pour la version:
# 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}"
Pour construire:
# 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 in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure 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}"
Toute cette entrée a été extrêmement utile. J'ai utilisé cette astuce, mais j'ai configuré mon script en tant que hook post-commit dans GIT, de sorte que CFBundleVersion est incrémenté après chaque commit réussi. Le script hook va dans .git/hooks. Un journal est laissé dans le répertoire du projet.
Cela répond à mon critère le plus fondamental. Je veux pouvoir extraire une version de GIT et reconstruire la version exacte que j'avais précédemment. Toute incrémentation effectuée pendant le processus de génération ne le fait pas.
Voici mon script:
#!/bin/sh
#
# post-commit
#
# This script increments the CFBundleVersion for each successful commit
#
plist="./XYZZY/XYZZY-Info.plist"
buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist")
if [ -z "$buildnum" ]; then
exit 1
fi
buildnumplus=$(expr $buildnum + 1)
/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnumplus" "$plist"
echo $(date) "- Incremented CFBundleVersion to" $buildnumplus >> hookLog.txt
Je ne sais pas quelle est la meilleure solution, mais je publierai la réponse d'Apple au cas où quelqu'un la chercherait ...
D'après ce message de questions-réponses d'Apple :
Les clés de version et de build spécifient respectivement les versions marketing et internes de votre application. agvtool est un outil de ligne de commande qui vous permet d'incrémenter automatiquement ces nombres au nombre immédiatement supérieur ou à un nombre spécifique.
Le numéro de version identifie une version non publiée ou publiée de votre application. Il est stocké dans l’Info.plist de votre application sous la forme CFBundleVersion
(version Bundle).
Vous devez suivre les étapes suivantes dans votre projet Xcode:
Accédez au volet Paramètres de construction de votre cible, puis mettez-le à jour pour toutes vos configurations de construction, comme suit:
Votre fichier de données de projet Xcode, project.pbxproj, inclut un paramètre de construction CURRENT_PROJECT_VERSION
(version actuelle du projet), qui spécifie la version actuelle de votre projet. agvtool recherche project.pbxproj pour CURRENT_PROJECT_VERSION
. Il continue à fonctionner si CURRENT_PROJECT_VERSION
existe et cesse de fonctionner, sinon. Sa valeur est utilisée pour mettre à jour le numéro de build.
Par défaut, Xcode n'utilise aucun système de gestion de versions. La configuration du système de gestion des versions sur Apple Generic garantit que Xcode inclura toutes les informations de version générées par agvtool dans votre projet.
agvtool recherche dans Info.plist de votre application votre version et vos numéros de build. Il les met à jour s'ils existent et ne fait rien sinon. Assurez-vous que les clés CFBundleVersion
(version groupée) et CFBundleShortVersionString
(chaîne de versions groupées, courte) existent dans votre Info.plist, comme indiqué dans l'image ci-dessous:
Quittez Xcode, puis naviguez jusqu'au répertoire contenant votre fichier de projet .xcodeproj dans l'application Terminal avant d'exécuter l'une des commandes suivantes. Le fichier de projet .xcodeproj contient project.pbxproj, utilisé par agvtool. (C'est la partie que vous pouvez exécuter dans un script au lieu d'une ligne de commande.)
Mise à jour du numéro de version
Pour mettre à jour le numéro de version vers une version spécifique, exécutez
xcrun agvtool new-marketing-version <your_specific_version>
Ex: Met à jour le numéro de version vers 2.0
xcrun agvtool new-marketing-version 2.0
Mise à jour du numéro de build
Pour incrémenter automatiquement votre numéro de build, exécutez
xcrun agvtool next-version -all
Pour définir le numéro de build de votre application sur une version spécifique, exécutez
xcrun agvtool new-version -all <your_specific_version>
Ex: Définissez le numéro de build sur 2.6.9
xcrun agvtool new-version -all 2.6.9
Prime:
Pour afficher le numéro de version actuel, exécutez
xcrun agvtool what-marketing-version
Pour afficher le numéro de build actuel, exécutez
xcrun agvtool what-version
FWIW - C’est ce que j’utilise actuellement pour augmenter le numéro de compilation uniquement pour les versions de version (qui inclut l’archivage). Fonctionne bien sous Xcode 5.1.
Copiez/collez simplement l'extrait de code dans une phase de construction Exécuter le script directement dans Xcode:
buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
if [ "$CONFIGURATION" = "Release" ]; then
buildnum=$((buildnum + 1))
echo "Build number updated to $buildnum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH"
fi;
Le script que j'utilise actuellement est très basé sur Alix's , ci-dessus. Mon adaptation, ci-dessous, ajoute un contrôle pour ne faire que l'incrémentation automatique sur une version release/archive.
Sans ce changement, il y aura des conflits de contrôle de version car chaque développeur incrémentera le numéro de build à son propre rythme. Et le fait que l'historique git serait inutilement pollué avec le numéro de build qui change tout le temps.
# xcode-build-bump.sh
# @desc Auto-increment Xcode target build number every time the project is archived
# @src stackoverflow.com/a/15483906
# @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. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)
if [ "Release" != "${CONFIGURATION}" ]
then
exit 0
fi
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}"
Il est également disponible (dans un format légèrement plus facile à copier et coller) en tant que GitHub Gist .
Merci pour le script. Cela fonctionne très bien.
Mon Info.plist se trouve dans un sous-répertoire avec un nom contenant des espaces. J'ai donc dû modifier le script d'exécution avec des guillemets autour du chemin de la pliste:
${PROJECT_DIR}/tools/bump_build_number.sh "${PROJECT_DIR}/${INFOPLIST_FILE}"
et le script shell de la même manière avec des guillemets autour de tous les chemins:
#!/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
Je recommanderais l'utilisation de autorevision .
Xcode permet à un fichier d’en-tête (qui peut être généré automatiquement au moment de la construction et non dans le vcs lui-même) de fournir des valeurs qui seront développées dans le fichier info.plist au moment de la construction. Vous pouvez trouver une procédure pour l’installer sur le site Web autorevision .
Autorevision a un type de sortie orienté vers ces types de fichiers d'en-tête pour aider dans exactement ces situations.
Un problème avec certaines de ces solutions est que Launch Services ne reconnaît que quatre cinq chiffres principaux dans la version groupée . J'ai un projet avec un numéro de construction qui se compte en milliers, alors je voulais utiliser certains des chiffres les moins significatifs.
Ce script Perl incrémente tous les Info.plists du projet, et pas seulement celui de la cible actuelle, de sorte que les numéros de build restent en bloc. Il utilise également un chiffre de patch et deux chiffres mineurs. La version 1.34.4 est donc fournie à la version 1.23.4. Je l'utilise comme un comportement de pré-génération, donc cela s'applique à tous les projets que je construis.
Le script est assez brutal, mais cela fonctionne pour moi.
#!/usr/bin/Perl
use strict;
use warnings;
use v5.12.0;
use Dir::Iterate;
for my $plist_file(grepdir { /-Info.plist$/ } '.') {
my $build = `/usr/libexec/PlistBuddy -c "Print CFBundleVersion" '$plist_file'`;
chomp $build;
next unless $build;
# Strip dots
$build =~ s/\.//g;
$build =~ s/^0//g;
# Increment
$build++;
# Re-insert dots
$build =~ s/^(\d{0,4}?) (\d{0,2}?) (\d{0,1}?)$/$1.$2.$3/x;
# Insert zeroes
$build =~ s{(^|\.)\.}{${1}0.}g;
system qq(/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" '$plist_file');
}
Vous pouvez utiliser le versioning générique d’Apple . Tout ce que vous avez à faire, c'est d'appeler agvtool next-version -all
à partir du répertoire qui héberge votre fichier .xcproj. Pour plus de détails, consultez l'URL ci-dessus.
En me basant sur la solution de Wil Gieseler , je n’avais qu’un changement à faire. Sa solution place le nombre de commits git dans le numéro de build. Utile, mais toujours un peu pénible pour trouver le commit qui a créé cette construction. Peu m'importait que le nombre de build augmente de façon monotone, j'ai donc abandonné cette exigence pour pouvoir accéder plus facilement au commit qui a généré un binaire donné.
À cette fin, j'ai modifié son premier script comme suit:
# Set the build number to the decimal conversion of the short version of the current git SHA
# Get the short version of the current git SHA in hexadecimal
SHA=$(git rev-parse --short @)
# Uppercase any alphabetic chars in SHA (bc doesn't like lowercase hex numbers)
UPPERCASE_SHA=$(tr '[:lower:]' '[:upper:]' <<< "$SHA")
# Use bc to convert the uppercase SHA from hex to decimal
BUILD_NUM=$(bc <<< "ibase=16;obase=A;$UPPERCASE_SHA")
# Set our build number to that
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUM" "${PROJECT_DIR}/${INFOPLIST_FILE}"
# To convert a build number back to a usable git SHA, run the following, substituting the build number for <build number>
# bc <<< "ibase=10;obase=16;<build number>"
Ceci convertit la version courte du git actuel SHA en décimal. Les caractères hexadécimaux ne répondent pas bien aux exigences du numéro de build d’Apple, c’est pourquoi j’ai dû le faire. Pour le reconvertir, vous exécuteriez simplement quelque chose comme ceci:
SHA=$(bc <<< "ibase=10;obase=16;<build number>")
in bash, où <build number>
est le numéro de construction obtenu à partir d'un binaire. Ensuite, lancez simplement git checkout $SHA
, et voilà.
S'agissant d'une adaptation de de la solution de Wil Gieseler , comme mentionné ci-dessus, vous aurez également besoin du script post-génération suivant:
# Set the build number to "DEVELOPMENT"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"
qui garde votre histoire git propre.
J'ai l'impression d'avoir trouvé ma tribu. Tribe, j'espère que VersionX vous amusera.
Il y a dix ans, alors que je travaillais sur un espace de travail contenant plus de 25 projets Xcode, j'en ai profité pour automatiser la version et créer des mises à jour de chaînes à un degré qui peut sembler absurde, si vous ne gérez qu'un projet ou deux avec des mises à jour occasionnelles.
VersionX:
C'était amusant à faire. J'ai appris un tas de bateaux sur le système de construction Xcode.
Voici un exemple du type de chaînes de version et de construction sophistiquées que VersionX pourrait générer automatiquement.
VersionX 1.0.1 β7 (c5959a3 “Nettoyer”)
Version marketing: VersionX 1.0.1 β7 Le "1.0.1 est dérivé de la balise pour la validation, tandis que La" Bêta 7 "est automatiquement générée par le nombre de validations, ou le nombre de constructions ( par exemple).
Version de construction: (c5959a3 «Nettoyer») Affiche le hachage de validation court et vous informe que le répertoire de construction ne contient aucune modification non validée.
Vous voudrez peut-être faire cela uniquement lorsque vous archive (et que vous le téléchargerez sur TF, par exemple) . Sinon, votre numéro de version pourrait monter très rapidement ..
Dans le schéma (Product/Edit Scheme/Archive/Pre-Actions), vous pouvez ajouter un script à exécuter uniquement lors de l'archivage.
En outre, vous souhaiterez peut-être réinitialiser le numéro de version chaque fois que vous incrémentez la version de l'application.
Dernière chose, si vous utilisez plutôt les archives, vous pouvez désactiver en toute sécurité:
# if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
...
# else
# echo "Not incrementing build number as source files have not changed"
# fi
Comme le numéro de build ne sera incrémenté que lorsque vous archive ...
EDIT: Corrigez ce que j'ai dit, les pré-actions dans l'archive se produisent après la construction (mais avant l'archivage), le numéro de la construction sera donc incrémenté pour la prochaine archive ... Mais vous pouvez créer un nouveau schéma et ajouter cette action à la construction actions) de ce nouveau schéma. et utiliser ce schéma lorsque vous voulez créer une nouvelle construction
J'ai essayé la procédure modifiée et cela n'a pas fonctionné, car: -
Xcode 4.2.1 modifie le sous-répertoire xcuserdata dans .xcodeproj
git note le changement précédent dans Project-Info.plist
La modification suivante entraîne leur ignorance et ne marque que les modifications authentiques: -
if [ -n "$(find $dir \! -path "*xcuserdata*" \! -path "*.git" -newer $plist)" ]; then
J'utilise la dernière révision SVN pour le numéro de build. Si vous modifiez le fichier Info.plist dans le répertoire de construction, vous n'affecterez pas le fichier source Info.plist:
# use the last SVN revision as the build number:
Info_plist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Info.plist"
defaults write "${Info_plist}" CFBundleVersion `svn stat -u | awk '/'"Status against revision:"'/ {print $4}'`
Je met à jour build number
en suivant la méthode.
$INFO_FILE
est le chemin du fichier plist . Et $build_number
est un nouveau numéro de build pour ce bâtiment.
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_number" "${INFO_FILE}"
En règle générale, mon $build_number
est composé de major
et minor
parties . La minor
provient d'informations de projet. Je décris donc comment générer la partie major
.
## Composed by `major` and `minor`.
## `minor` is parsed from project information. It's another story.
## Examples: `21.1`, or `21.1.3`
build_number="${major_number}.${minor_number}"
J'ai 2 stratégies pour décider du $build_number
.
Cette stratégie utilise le nombre git tag
pour décider de la major
de build number
. S'il existe des balises 53
du projet, il renverra 53
en suivant le script Shell.
Généralement, cela augmente. Et cela obligera le développeur à mettre une balise git avant publication.
major_number=$(git tag -l | wc -l | grep -oE "\d+")
Laissez le système Jenkins CI décider de la partie major
. Il a une variable d'environnement BUILD_NUMBER
. Il augmente automatiquement lorsque vous utilisez le système CI. Ces informations sont utiles pour suivre l'historique du projet sur le système CI.
major_number=${BUILD_NUMBER}
Vous voudrez peut-être consulter un nouvel outil que j'ai développé, appelé Xcodebump. Il peut gérer la mise à jour à la fois CFBundleShortVersionString et CFBundleVersion. La dernière étape consiste également à vérifier et à baliser le commit afin qu'il corresponde aux valeurs de CFBundle.
Le projet Xcodebump se trouve ici:
Heres une version mise à jour. Cela fonctionne à partir de Xcode 9.3.1, iOS 11.
Cliquez sur 'Construire les phases' à partir de votre cible d'application, cliquez sur l'icône + pour ajouter un nouveau script d'exécution, puis collez ce code dans la zone.
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}"
Allez dans le fichier Info.plist et réglez la «Version du paquet» sur 1, et la «Chaîne des versions du paquet, courte» sur 1, vous devriez être défini.
Générez le projet avec Info.plist dans la vue. La version de l’ensemble (numéro de version) devrait être modifiée.
Je trouve très pratique d’utiliser Automatiser les numéros de version et de construction à l’aide de agvtool .
Essaye ça:
<your_app_target>
Le script (la première ligne est facultative):
exec > ${PROJECT_DIR}/prebuild.log 2>&1
cd ${PROJECT_DIR}
xcrun agvtool next-version -all
cd -
Voici ma solution ... Si vous êtes comme moi: terminal friendly, comme Ruby, comme les versions sémantiques, essayez ceci.
Créez un fichier nommé Rakefile
qui contient ceci:
require "xcodeproj"
require "versionomy"
XCODEPROJECT = "MyProject.xcodeproj"
INFOPLISTFILE = "MyProject/MyProject-Info.plist"
$UPDATES = [:major,:minor,:tiny]
$UPDATES.each { |part|
desc "increment #{part} part of version"
task "increment:#{part}" do |task|
version=`/usr/libexec/Plistbuddy -c "Print CFBundleVersion" #{INFOPLISTFILE}`.chomp
version=Versionomy.parse(version)
version=version.bump(part)
# I use the same string for CFBundleVersion and CFBundleShortVersionString for now
`/usr/libexec/PlistBuddy -c "Set :CFBundleVersion #{version}" #{INFOPLISTFILE}`
`/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString #{version}" #{INFOPLISTFILE}`
print "version upgraded to #{version}\n"
end
}
Préparez: gem install xcodeproj versionomy
Exécuter: rake increment:major
ou rake increment:minor
ou rake increment:tiny
quand vous le souhaitez.