Pour certains projets, je tiens à s'engager et à incrémenter mon numéro de build à chaque fois que je compile. Pas tous les projets, mais sur certains. Dans d'autres cas, je veux seulement incrémenter automatiquement s'engager et le numéro de build quand je fais une configuration version release.
Apple fournit un outil appelé agvtool qui signifie outil d'Apple des versions génériques. Mais, vous ne veulent généralement pas à l'utiliser si vous avez une Xcode projet ouvert, afin de l'incorporer dans une phase exécuter le script de construction n'est pas conseillé.
J'ai trouvé quelques exemples sur internet des scripts qui incorporent le nombre Subversion construire, mais ils ne correspondaient pas à mes besoins. Ceux que j'ai trouvés étaient écrits en Perl et Python, et je ne suis pas particulièrement à l'aise dans l'une de ces langues, alors j'ai décidé d'écrire mon propre en Ruby, avec laquelle j'ai un niveau de confort beaucoup plus élevé, plutôt que de modifier ces existantes pour répondre à mes besoins.
Ce script n'utilise pas le système de versioning intégré dans Xcode, mais directement définit la version Bundle basé sur le numéro de version Subversion. Il effectue également un engagement s'il ya eu des changements depuis la dernière build avant d'empoigner le numéro de version Subversion.
Pour utiliser ce script, cliquez-droit sur votre cible où vous souhaitez utiliser et sélectionnez cette Ajouter-> Nouveau Phase de construction-> Exécuter Nouveau script de compilation de la phase.
Lorsque la fenêtre s'ouvre, réglez le à Shell de
ou utiliser ce script si vous voulez seulement s'engager et incrémenter le numéro de build sur le construit en utilisant la configuration de sortie:
Une fois que vous le coller dans, fermez la fenêtre. Vous pouvez renommer le script run construire phase à quelque chose de plus significatif. Vous pouvez le faire en cliquant-droit dessus et en sélectionnant Rename à partir du menu qui apparaît. Aussi, vous devez faire glisser la nouvelle phase de construction de façon à ce qu'il se déclenche avant que le Ressources Bundle Copy phase de sorte que l'engagement passe avant qu'il construit l'application. Sinon, la demande sera toujours refléter le numéro de version précédente dans la fenêtre Obtenir des informations.
C'est tout ce que vous avez à faire. Maintenant, quand vous construisez ou faire un version Release, Xcode va s'engager vos fichiers sur le dépôt Subversion s'il ya eu des changements, puis définir la version bundle à la valeur actuellement dans Subversion. Maintenant, ce script n'a pas été testé. Si vous avez des problèmes, laissez-moi savoir à leur sujet, et je vais essayer de résoudre tous les problèmes qui surgissent.
Apple fournit un outil appelé agvtool qui signifie outil d'Apple des versions génériques. Mais, vous ne veulent généralement pas à l'utiliser si vous avez une Xcode projet ouvert, afin de l'incorporer dans une phase exécuter le script de construction n'est pas conseillé.
J'ai trouvé quelques exemples sur internet des scripts qui incorporent le nombre Subversion construire, mais ils ne correspondaient pas à mes besoins. Ceux que j'ai trouvés étaient écrits en Perl et Python, et je ne suis pas particulièrement à l'aise dans l'une de ces langues, alors j'ai décidé d'écrire mon propre en Ruby, avec laquelle j'ai un niveau de confort beaucoup plus élevé, plutôt que de modifier ces existantes pour répondre à mes besoins.
Ce script n'utilise pas le système de versioning intégré dans Xcode, mais directement définit la version Bundle basé sur le numéro de version Subversion. Il effectue également un engagement s'il ya eu des changements depuis la dernière build avant d'empoigner le numéro de version Subversion.
Pour utiliser ce script, cliquez-droit sur votre cible où vous souhaitez utiliser et sélectionnez cette Ajouter-> Nouveau Phase de construction-> Exécuter Nouveau script de compilation de la phase.
Lorsque la fenêtre s'ouvre, réglez le à Shell de
/usr/bin/rubypuis collez le script suivant dans la fenêtre si vous voulez à s'engager et à incrémenter à chaque construction:
def get_file_as_string(filename)
data = ''
f = File.open(filename, "r")
f.each_line do |line|
data += line
end
return data
end
# commit if any changes
%x[svn -m 'automated build commit' commit]
svn_version = %x[svnversion -n]
parts = svn_version.split(":")
new_version = parts[1]
# Figure out where the Info.plist file is
project_dir = ENV['PROJECT_DIR']
infoplist_file = ENV['INFOPLIST_FILE']
plist_filename = "#{project_dir}/#{infoplist_file}"
infoplist = get_file_as_string("/Users/jeff/dev/FlyPaper/Resources/Info.plist")
start_of_key = infoplist.index("CFBundleVersion")
start_of_value = infoplist.index("" , start_of_key)
end_of_value = infoplist.index("", start_of_value) + "".length
old_value = infoplist[start_of_value, end_of_value - start_of_value]
new_key = "#{new_version} "
new_info_plist = "#{infoplist[0, start_of_value]}#{new_key}\n#{infoplist[end_of_value+1, infoplist.length - (end_of_value+1)]}"
File.open(plist_filename, 'w') {|f| f.write(new_info_plist) }
ou utiliser ce script si vous voulez seulement s'engager et incrémenter le numéro de build sur le construit en utilisant la configuration de sortie:
def get_file_as_string(filename)
data = ''
f = File.open(filename, "r")
f.each_line do |line|
data += line
end
return data
end
if ENV['BUILD_STYLE'] == "Release"
# commit if any changes
%x[svn -m 'automated build commit' commit]
end
svn_version = %x[svnversion -n]
parts = svn_version.split(":")
new_version = parts[1]
# Figure out where the Info.plist file is
project_dir = ENV['PROJECT_DIR']
infoplist_file = ENV['INFOPLIST_FILE']
plist_filename = "#{project_dir}/#{infoplist_file}"
infoplist = get_file_as_string("/Users/jeff/dev/FlyPaper/Resources/Info.plist")
start_of_key = infoplist.index("CFBundleVersion")
start_of_value = infoplist.index("" , start_of_key)
end_of_value = infoplist.index("", start_of_value) + "".length
old_value = infoplist[start_of_value, end_of_value - start_of_value]
new_key = "#{new_version} "
new_info_plist = "#{infoplist[0, start_of_value]}#{new_key}\n#{infoplist[end_of_value+1, infoplist.length - (end_of_value+1)]}"
File.open(plist_filename, 'w') {|f| f.write(new_info_plist) }
Une fois que vous le coller dans, fermez la fenêtre. Vous pouvez renommer le script run construire phase à quelque chose de plus significatif. Vous pouvez le faire en cliquant-droit dessus et en sélectionnant Rename à partir du menu qui apparaît. Aussi, vous devez faire glisser la nouvelle phase de construction de façon à ce qu'il se déclenche avant que le Ressources Bundle Copy phase de sorte que l'engagement passe avant qu'il construit l'application. Sinon, la demande sera toujours refléter le numéro de version précédente dans la fenêtre Obtenir des informations.
C'est tout ce que vous avez à faire. Maintenant, quand vous construisez ou faire un version Release, Xcode va s'engager vos fichiers sur le dépôt Subversion s'il ya eu des changements, puis définir la version bundle à la valeur actuellement dans Subversion. Maintenant, ce script n'a pas été testé. Si vous avez des problèmes, laissez-moi savoir à leur sujet, et je vais essayer de résoudre tous les problèmes qui surgissent.
Aucun commentaire:
Enregistrer un commentaire