Suivre la version de compilation de son application

AliGatorAliGator Membre, Modérateur
Un topic pour discuter de quelles sont vos techniques pour suivre les versions de vos applications, et plus précisément intégrer vos numéros de version dans votre application.

Pour ma part j'ai commencé à  prendre l'habitude de générer un fichier version.h via un Script de Pre-Build, qui génère ce .h avec des #define dedans, et dans mon code j'utilise ces valeurs de #define là  où je veux afficher la version.
Pour les applis iPhone, il m'arrive parfois même de mettre la version dans les prefs de l'appli (Settings.bundle), avec un setValue:forKey sur NSUserDefaults, ce qui permet de voir la version dans les prefs sans surcharger l'appli


Maintenant, je viens de découvrir dans les réglages projet l'existence du flag VERSION_INFO_FILE, qui semble indiquer le nom d'un fichier .c de versionning automatiquement généré à  la compilation... Mais que contient ce fichier, comment l'exploiter ? J'ai rien trouvé dans la doc...
Et quelles infos de versionning utilise-t-il ?
Car s'il y a un truc intégré à  Xcode pour nous générer des infos de versionning qu'on peu réutiliser dans notre code, je suis preneur, mais encore faudrait-il savoir comment faire ?

Réponses

  • zoczoc Membre
    18:33 modifié #2
    Il suffit de choisir le format du numéro de version, et Code génèrera automatiquement un fichier ".c" et l'intégrera à  la compilation de l'application. Ce fichier contient 2 constantes décrivant la version extraite du fichier Info.plist de l'application (Bundle Version). Exemple dans le cas de mon application de test (qui s'appelle HgX):
    const unsigned char HgXVersionString[] __attribute__ ((used)) = "@(#)PROGRAM:HgX  PROJECT:HgX-0.1" "\n"; const double HgXVersionNumber __attribute__ ((used)) = (double)0.1;
  • AliGatorAliGator Membre, Modérateur
    18:33 modifié #3
    Ok donc en effet ça a l'air d'être intéressant comme solution...

    Mais je n'arrive toujours pas à  la faire fonctionner, ça t'embêterait de détailler un peu plus ?
    Je vais dans les Build Settings de mon projet, partie "Versionning", je rentre une valeur dans "Current Project Version", je laisse la valeur par défaut dans le reste (y compris "Generated Versioning Source Filename" qui est mis à  "MonProjet_vers.c")... Et je build... mais je ne vois nulle part le fichier MonProjet_vers.c qui est généré ?

    Qu'ais-je oublié ? Ou sinon comment puis-je voir ce fichier .c (pour voir le nom des variables qui sont disponibles et utilisables, car je peux pas les deviner sinon, j'imagine) ? Je m'attendais à  le trouver qqpart soit dans le dossier du projet soit dans le dossier build, mais je n'en voit nulle trace... faut faire/renseigner un truc en plus que que ça le génère ?

    Merci
  • zoczoc Membre
    18:33 modifié #4
    Normalement il est dans un sous dossier "DerivedSources" dans le dossier de build.
  • AliGatorAliGator Membre, Modérateur
    18:33 modifié #5
    Snif, je l'ai pas ce dossier :(
    Tout comme je n'ai pas de build setting du nom de "DERIVED_FILE_DIR" (que j'ai vu listé dans la Build Setting Reference) apparemment non plus...

    Je sèche du coup. T'avais rien fait de particulier pour que ça marche ? Rentré des infos à  un endroit (qui si elles ne sont pas renseignées ne génèrent pas ce fichier, peut-être) ? Ou ajouté une Build Phase pour générer ce fichier ?

    Bizarrement je trouve peu d'infos dans la doc quant à  ce versionning, j'ai loupé un article / programming guide ?
  • zoczoc Membre
    18:33 modifié #6
    Non, je ne me souviens pas avoir fait autre chose que d'activer la fonction dans les "build settings" de mon application...

    Je ne suis pas chez moi là , mais au bureau (sur un PC  B) ), donc je ne peux pas vérifier. Je le ferai ce soir en rentrant.
  • ClicCoolClicCool Membre
    18:33 modifié #7
    De mon côté j'ai bien le fichier nommé "$(PRODUCT_NAME)_vers.c". dans un dossier DerivedSources dans le dossier Builds/PRODUCT_NAME.build/Debug/PRODUCT_NAME.build/

    J'ai juste renseigné le numéro de version dans CURRENT_PROJECT_VERSION et choisi Apple Generic dans VERSIONING_SYSTEM.
  • AliGatorAliGator Membre, Modérateur
    18:33 modifié #8
    Alleluia, j'avais bêtement pas vu le "Versioning System" dans ce truc... Honte à  moi, c'est lundi matin, j'ai les yeux fatigués ;D
    En mettant "Apple Generic" en effet ça marche tout de suite mieux.


    Après, l'idéal ça serait de pouvoir y intégrer la version SVN ou la BuildDate là  dedans. Vous avez une idée de la façon de faire ?

    J'ai bien pensé à  mettre __DATE__ dans les sources où je voudrais insérer la build date... mais encore faut-il que je sois sûr que ces sources soient recompilées à  chaque recompilation du projet... Or avec les makefiles comme il ne recompile que ce qui a été modifié... Si on n'édite pas ce fichier à  la main, il ne regénère pas la __DATE__ et ne la met donc pas à  jour...

    L'idéal serait quand même que ce système de versionning proposé ici intégré à  Xcode permette (qui à  y mettre du script ou à  taper qqpart dans les scripts intégrés à  Xcode, et faire en sorte de pouvoir proposer un autre versionning system que "Apple Generic" ?) d'intégrer ces informations de BuildDate et de SVN Version...
  • zoczoc Membre
    18:33 modifié #9
    Je pense que pour aller plus loin que ce que propose la solution d'Apple (qui est assez bien décrite ici), notamment pour intégrer les numéros de version Subversion, il faut obligatoirement passer par un script et une Build Phase préalable à  la compilation.

    On trouve pas mal de scripts faisant ça en cherchant un peu sur Google.
  • AliGatorAliGator Membre, Modérateur
    18:33 modifié #10
    Bah oui en fait l'étape du script je l'avais déjà  faite (comme je le mentionnais dans mon premier post) mais ça me convenait que moyennement surtout quand j'ai vu qu'il y avait une section "Versionning" dans les réglages de projet et/ou de target dans Xcode...

    Et le plus gros problème, que même les scripts que j'ai pu trouver sur Google ne semblent pas adresser, c'est que le fichier de versionning généré par le script n'a pas l'air d'être forcément recompilé (et donc remis à  jour) à  chaque compilation...

    Quoiqu'en même temps les scripts que j'ai trouvé généraient souvent un .h, et non un .c... Mais bon, ça change rien, normalement le makefile devrait voir que le .h, que j'ai généré, a changé de date par rapport à  la dernière compilation, et donc recompiler tous les fichiers qui le #includent... mais ça m'a l'air bancal et ne pas marcher à  tous les coups ?
Connectez-vous ou Inscrivez-vous pour répondre.