J'ai une application que j'ai développée avec Xcode 3 et que j'ai récemment commencé à éditer avec Xcode 4. Dans le résumé de la cible, j'ai le formulaire cible de l'application iOS avec les champs: identifiant, version, build, appareils et cible de déploiement. Le champ de version est vide et le champ de construction est 3.4.0 (qui correspond à la version de l'application de quand j'étais encore en train de modifier avec Xcode 3).
Mes questions sont:
Quelle est la différence entre les champs version et build?
Pourquoi le champ de version était-il vide après la mise à niveau vers Xcode 4?
Réponses:
Apple a en quelque sorte réorganisé / réorienté les champs.
À l'avenir, si vous regardez sur l'onglet Info pour votre cible d'application, vous devez utiliser la "chaîne de versions Bundle, courte" comme version (par exemple, 3.4.0) et "version Bundle" comme version (par exemple, 500 ou 1A500 ). Si vous ne les voyez pas tous les deux, vous pouvez les ajouter. Celles-ci seront mappées aux zones de texte Version et Build appropriées dans l'onglet Résumé; ce sont les mêmes valeurs.
Lorsque vous affichez l'onglet Info, si vous cliquez avec le bouton droit et sélectionnez Afficher les clés / valeurs brutes , vous verrez que les noms réels sont
CFBundleShortVersionString
(Version) etCFBundleVersion
(Build).La version est généralement utilisée de la manière dont vous semblez l'avoir utilisée avec Xcode 3. Je ne sais pas à quel niveau vous demandez la différence Version / Build, donc je vais y répondre philosophiquement.
Il existe toutes sortes de schémas, mais le plus populaire est le suivant:
{MajorVersion}. {MinorVersion}. {Révision}
La version est ensuite utilisée séparément pour indiquer le nombre total de versions pour une version ou pour toute la durée de vie du produit.
De nombreux développeurs commencent le numéro de build à 0, et chaque fois qu'ils construisent, ils augmentent le nombre d'un, augmentant pour toujours. Dans mes projets, j'ai un script qui augmente automatiquement le nombre de build chaque fois que je construis. Voir les instructions ci-dessous.
D'autres développeurs, dont Apple, ont un numéro de build composé d'une version majeure + version mineure + nombre de builds pour la version. Ce sont les numéros de version du logiciel réels, par opposition aux valeurs utilisées pour le marketing.
Si vous allez dans le menu Xcode > À propos de Xcode , vous verrez les numéros de version et de build. Si vous appuyez sur le bouton Plus d'infos ... vous verrez un tas de versions différentes. Depuis le Plus d' info ... bouton a été enlevé dans Xcode 5, cette information est également disponible à partir du logiciel> Developer section du Système d' information sur l' application, disponible en ouvrant d' Apple Menu> À propos de ce Mac > System Report ... .
Par exemple, Xcode 4.2 (4C139). La version marketing 4.2 est la version 4 de la build majeure, la version mineure C de la build et le numéro de build 139. La prochaine version (probablement 4.3) sera probablement la version 4D de la build, et le numéro de build recommencera à 0 et augmentera à partir de là.
Les numéros de version / build de l'iPhone Simulator sont identiques, tout comme les iPhones, les Mac, etc.
Mise à jour : sur demande, voici les étapes pour créer un script qui s'exécute chaque fois que vous créez votre application dans Xcode pour lire le numéro de build, l'incrémenter et le réécrire dans le
{App}-Info.plist
fichier de l'application . Il y a des étapes supplémentaires facultatives si vous souhaitez écrire vos numéros de version / build dans vosSettings.bundle/Root*.plist
fichiers.Ceci est étendu de l'article pratique ici .
Dans Xcode 4.2 - 5.0:
/bin/bash
.Copiez et collez ce qui suit dans la zone de script pour les numéros de build entiers:
Comme l'a souligné @Bdebeez, l' outil de version générique d'Apple (
agvtool
) est également disponible. Si vous préférez l'utiliser à la place, il y a quelques choses à changer en premier:Notez qu'avec la
agvtool
méthode, vous pouvez toujours obtenir périodiquement des builds échoués / annulés sans erreurs. Pour cette raison, je ne recommande pas d'utiliseragvtool
ce script.Néanmoins, dans votre phase d' exécution de script , vous pouvez utiliser le script suivant:
L'
next-version
argument incrémente le numéro de build (bump
est également un alias pour la même chose) et est mis à-all
jourInfo.plist
avec le nouveau numéro de build.Et si vous disposez d'un ensemble de paramètres dans lequel vous affichez la version et la build, vous pouvez ajouter ce qui suit à la fin du script pour mettre à jour la version et la build. Remarque: modifiez les
PreferenceSpecifiers
valeurs pour qu'elles correspondent à vos paramètres.PreferenceSpecifiers:2
signifie regarder l'élément à l'index 2 sous lePreferenceSpecifiers
tableau dans votre fichier plist, donc pour un index basé sur 0, c'est le 3ème paramètre de préférence dans le tableau.Si vous utilisez
agvtool
au lieu de lireInfo.plist
directement, vous pouvez ajouter ce qui suit à votre script à la place:Et si vous avez une application universelle pour iPad et iPhone, vous pouvez également définir les paramètres du fichier iPhone:
la source
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") dec=$((0x$buildNumber)) buildNumber=$(($dec + 1)) hex=$(printf "%X" $buildNumber) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $hex" "$INFOPLIST_FILE"
(Je laisse juste ceci ici pour ma propre référence.) Cela montrera la version et la construction pour les champs "version" et "build" que vous voyez dans une cible Xcode:
Dans Swift
la source
alloc
/init
la chaîne, qui conserve la chaîne, mais vous ne la libérez pas. Sur un objet que vous revenez d'une méthode, vous devez généralement utiliser une méthode pratique pour que la chaîne soit automatiquement libérée automatiquement, ou appelezautorelease
. Soit:return [NSString stringWithFormat:@"%@ build %@", version, build];
OUreturn [[[NSString alloc] initWithFormat:@"%@ build %@", version, build] autorelease];
Le numéro de build est un numéro interne qui indique l'état actuel de l'application. Il diffère du numéro de version en ce qu'il n'est généralement pas accessible aux utilisateurs et ne dénote aucune différence / fonctionnalités / mises à niveau comme le ferait généralement un numéro de version.
Pensez-y comme ceci:
CFBundleVersion
): le numéro de la construction. Habituellement, vous commencez à 1 et augmentez de 1 à chaque génération de l'application. Il permet rapidement des comparaisons dont la construction est plus récente et indique le sens de la progression de la base de code. Ceux-ci peuvent être extrêmement précieux lorsque vous travaillez avec QA et que vous devez vous assurer que les bogues sont enregistrés par rapport aux builds appropriés.CFBundleShortVersionString
): numéro accessible à l'utilisateur que vous utilisez pour désigner cette version de votre application. Habituellement, cela suit un schéma de version Major.minor (par exemple MyAwesomeApp 1.2) pour permettre aux utilisateurs de savoir quelles versions sont des mises à jour de maintenance plus petites et quelles sont les nouvelles fonctionnalités.Pour utiliser cela efficacement dans vos projets, Apple fournit un excellent outil appelé
agvtool
. Je recommande fortement d'utiliser cela car il est BEAUCOUP plus simple que de créer des scripts pour les changements de plist. Il vous permet de définir facilement le numéro de build et la version marketing. Il est particulièrement utile lors de l'écriture de scripts (par exemple, en mettant facilement à jour le numéro de build sur chaque build ou même en demandant quel est le numéro de build actuel). Il peut même faire des choses plus exotiques comme marquer votre SVN lorsque vous mettez à jour le numéro de build.Pour l'utiliser:
agvtool new-version 1
(définissez le numéro de build sur 1)agvtool new-marketing-version 1.0
(définissez la version Marketing sur 1.0)Voir la page de manuel de
agvtool
pour une tonne de bonnes informationsla source
agvtool
Easy iPhone Application Versioning avec agvtoolLe script pour incrémenter automatiquement le numéro de build dans la réponse ci-dessus n'a pas fonctionné pour moi si le numéro de build est une valeur à virgule flottante, alors je l'ai légèrement modifié:
la source
Le numéro de version marketing est pour les clients, appelé numéro de version . Il commence avec 1.0 et remonte pour les mises à jour majeures vers 2.0 , 3.0 , pour les mises à jour mineures pour 1.1 , 1.2 et pour les corrections de bogues vers 1.0.1 , 1.0.2 . Ce nombre est orienté vers les versions et les nouvelles fonctionnalités.
Le numéro de build est principalement le nombre interne de builds qui ont été faites jusque-là. Mais certains utilisent d'autres numéros comme le numéro de branche du référentiel. Ce nombre doit être unique pour distinguer les différentes versions presque identiques.
Comme vous pouvez le voir, le numéro de build n'est pas nécessaire et c'est à vous de choisir le numéro de build que vous souhaitez utiliser. Donc, si vous mettez
Xcode
à jour votre version principale, le champ de construction est vide. Le champ de version n'est peut-être pas vide !.Pour obtenir le numéro de build en tant que
NSString
variable:Pour obtenir le numéro de version sous forme de
NSString
variable:Si vous voulez les deux en un
NSString
:Ceci est testé avec Xcode version 4.6.3 (4H1503) . Le numéro de build est souvent écrit entre parenthèses / accolades. Le numéro de build est en hexadécimal ou décimal.
Dans Xcode, vous pouvez incrémenter automatiquement le numéro de build sous la forme d'un nombre décimal en plaçant ce qui suit dans la
Run script
phase de build dans les paramètres du projetPour le numéro de build hexadécimal, utilisez ce script
la source
Merci à @nekno et @ ale84 pour les bonnes réponses.
Cependant, j'ai modifié peu le script de @ ale84 pour incrémenter les numéros de build pour la virgule flottante.
la valeur de incl peut être modifiée en fonction de vos exigences de format flottant. Par exemple: si incl = .01, le format de sortie serait ... 1.19, 1.20, 1.21 ...
la source
Une autre façon consiste à définir le numéro de version dans
appDelegate
didFinishLaunchingWithOptions
:la source