Insérer le numéro de révision Subversion dans Xcode
Je voudrais insérer le numéro de révision Subversion (tel que rapporté par svnversion
) dans mon projet Xcode. J'ai réussi à insérer le numéro de révision dans le Info.plist
dans le $PROJECT_DIR
, mais ce n'est pas une bonne solution, car le fichier est versionné. J'ai essayé d'insérer la révision dans le Info.plist
dans le répertoire de construction, mais puis-je obtenir une erreur lors de la signature du code de phase (c'est une application iPhone).
Est-il un moyen simple d'obtenir le numéro de révision dans l'application à l'aide de certains fichiers, de sorte que l'évolution de révision ne modifie pas les fichiers versionnés? J'ai pensé que peut-être que je pourrait créer une source temporaire de fichier qui serait en lien avec les autres et de fournir un fonction permettant d'obtenir le numéro de révision. Mais je ne sais pas comment faire.
Je ne suis pas beaucoup intéressé à d'autres solutions, c'est à dire. le agvtool
. Tout ce que je veux est le numéro de révision disponibles à la demande, sans trop de magie.
- Voir cette question: http://stackoverflow.com/questions/111436/how-can-i-get-the-svn-revision-number-in-php
- Cette question n'a pas de réponse définitive, et le SVN de substitution de mots clés n'est pas une bonne solution dans ce cas — il a besoin d'un moyen de mettre à jour le traité de la propriété de la liste de fichier, pas la version one.
- Vous n'avez pas besoin de créer une révision.h fichier et l'ignorez, vous pouvez modifier les traités plist directement à l'aide d'un simple utilitaire d'Apple. Voir ma réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Il y a une solution beaucoup plus simple: à l'aide de PlistBuddy, inclus à
/usr/libexec/PlistBuddy
dans Leopard. Voir ma réponse à une question DONC pour plus de détails.PlistBuddy peut être utilisé dans un Script phase de construction de l'intérieur de Xcode, et peut être utilisé pour n'affecter que le traité fichier plist. Il suffit de mettre, une fois la Copie des Ressources de phase, et vous n'avez même pas à nettoyer la cible pour qu'il fonctionne à chaque fois. Vous n'avez même pas à imprimer la valeur d'un fichier d'en-tête et de faire SVN de l'ignorer, soit.
En supposant que vous ajoutez la phase de construction avant la signature de code se produit, votre plist doit être signé avec la valeur substituée.
svn update
et la révision de base incréments, mais aucune des ressources pour une cible particulière ont changé. Cela pourrait toujours être résolu par un propre et construire, ou manuellement en touchant le fichier plist, auquel cas la prochaine génération va fonctionner très bien. Hmmm....svnversion | cut -f 2 -d : | grep -o \"[0-9]*\"
la coupe divise la reva:revb (compte b) et le grep supprime tous les chiffres/usr/libexec/PlistBuddy
? Si oui, j'obtiens une erreur 🙁svn cleanup
.Pour la postérité, j'ai fait quelque chose de similaire à zoul pour les applications iPhone, par l'ajout d'une révision.h pour mon projet, puis en ajoutant ce qui suit à titre d'Exécuter un Script phase de construction:
J'ai fait cela pour s'emparer d'un simple numéro de révision, par opposition à la plus détaillée de la chaîne de svnversion produit dans zoul de la solution.
Pour les applications Mac, j'ai basé mon approche sur ce post, et plutôt créé une buildnumber.xcconfig fichier. Dans le cadre de l'paramètres de la cible, je l'ai changé en Fonction de la valeur en bas à droite de la boîte de dialogue pour buildnumber.xcconfig. Dans l'Info.plist, j'ai modifié les lignes suivantes:
De sorte que mon dialogue à Propos d'affichage, une chaîne de version similaire à la Version 1.0 (1234), où 1234 est le numéro de révision Subversion. Enfin, j'ai créé un Exécuter le Script phase de construction avec le code suivant:
Cela peut ne pas être la façon la plus propre, car elle nécessite un cycle de nettoyage avant la construction de la nouvelle révision de tenir compte dans l'application, mais il fonctionne.
Tant que nouvel utilisateur de Débordement de Pile, je ne peux pas commenter sur Quinn post, mais j'ai un petit changement à faire sa solution un peu plus précis si vous utilisez un dépôt SVN qui a plusieurs projets à la fois.
À l'aide de son approche, la svnversion nombre qui est renvoyé est le dernier check-in pour l'ensemble du référentiel, pas nécessairement votre base de code. Ce tweak permet la mise à jour spécifiques à votre base de code.
À l'aide de l'indicateur-c permettra de recueillir le dernier commit fait dans la branche active/tag/trunk pour votre base de code dans le formulaire de :, puis couper les morceaux que vous ne souhaitez pas stocker le numéro de Révision.
Aussi, notez les guillemets autour de l' ${TARGET_BUILD_DIR}. Ceux-ci sont nécessaires pour les utilisateurs qui décident de mettre leur projet dans une structure de répertoire avec des espaces dans le nom.
Espère que cela aide les autres!
J'ai trouvé cette page en essayant de faire quelque chose de similaire pour mon application iPhone et pensé qu'il pourrait être utile de partager le code, je l'ai décidé. J'essayais d'avoir une version de base le numéro de série dans ma Cible Info (par exemple 0.9.5) mais ensuite, ajouter mon numéro de révision SVN à la fin de celui-ci. J'avais besoin de ce stockées dans CFBundleVersion de sorte que AdHoc les utilisateurs seraient en mesure de mettre à jour via iTunes, même si je ne me souviens pas de modifier le numéro de version dans ma Cible panneau d'information. C'est pourquoi je ne pouvais pas utiliser la "révision.h" méthode qui, autrement, a fonctionné à merveille. Voici le dernier code que j'ai réglé sur lequel j'ai placé comme l'Exécution d'un Script phase juste après le "Copier Bundle de Ressources" phase de construction:
Il doit ajouter les résultats de svnversion à la fin de ce qui est défini dans la base de Info.plist version. De cette façon, vous pouvez avoir quelque chose comme la 0.9.5 dans votre info plist et ont encore la .189 numéro de révision ajouté à la fin, donnant un numéro de version finale 0.9.5.189
Espère que cela aide quelqu'un d'autre!
svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'
à partir d'une autre bonne réponse (George Walters II).Puisque je ne peux pas commenter sur Quinn réponse:
si vous êtes à l'aide de la MacPorts client svn, il peut être nécessaire d'inclure le chemin d'accès complet de la svnversion commande /opt/local/bin/svnversion dans mon cas. J'ai aussi ajouté l'option-c pour svnversion.
Aussi, si vous êtes seulement intéressés dans le deuxième numéro de version de des révisions mélangées, ajouter une "coupure" de la commande à l'invocation, comme ceci:
Une autre version, écrite dans l'Apple Script. Regexp pour la previousValue peut être modifiée, actuellement, il prend en charge uniquement les versions en XX.XX.XX format (majeur, mineur, svn rev).
Exécuter par
/usr/bin/osascript