667 votes

Version vs construire dans XCode 4

J'ai une application que j'ai développé avec XCode 3 et a récemment commencé à modifier avec XCode 4. Dans la cible résumé j'ai l'iOS de l'application cible formulaire avec les champs: identifiant, la version, la construction, les appareils, et la cible de déploiement. Le champ version est vide et que le champ est 3.4.0 (qui correspond à la version de l'application à partir de quand j'étais encore l'édition avec XCode 3).

Mes questions sont les suivantes:

  1. Quelle est la différence entre la version et de construire des champs?

  2. Pourquoi la version champ vide après j'ai mis à jour de XCode 4?

Merci.

1234voto

nekno Points 10556

Apple sorte de réarrangés/redéfini les champs.

À l'avenir, si vous regardez sur l'onglet Infos de votre Application Cible, vous devez utiliser le "Bundle versions chaîne courte" que votre Version (par exemple, 3.4.0) et de "Bundle version" comme votre construction (par exemple, 500 ou 1A500). Si vous ne voyez pas tous les deux, vous pouvez les ajouter. Ceux-ci vont de la carte à la bonne Version et de Construire des zones de texte sur l'onglet Résumé; ils sont les mêmes valeurs.

Lors de l'affichage de l'onglet Info, si vous faites un clic droit et sélectionnez Afficher les Raw de Clés/Valeurs, vous verrez les noms réels sont CFBundleShortVersionString (Version) et CFBundleVersion (à Construire).

La Version est généralement utilisé comment vous semblez avoir été de l'utiliser avec Xcode 3. Je ne suis pas sûr à quel niveau vous vous posez à propos de la Version/Build différence, donc je vais y répondre point de vue philosophique.

Il y a toutes sortes de régimes, mais un populaire est:

{MajorVersion}.{MinorVersion}.{Révision}

  • Version majeure - de Grands changements, les remaniements, et la fonctionnalité les changements
  • De version mineur - Mineur améliorations, ajouts de fonctionnalités
  • Révision - Un numéro de patch pour les corrections de bogues

Ensuite, la construction est utilisée séparément pour indiquer le nombre total de versions pour une version ou pour l'ensemble de la durée de vie du produit.

De nombreux développeurs de commencer le numéro de Build à 0, et à chaque fois qu'ils construisent sur elle, ils augmentent le nombre par un, en augmentant toujours. Dans mes projets, j'ai un script qui augmente automatiquement le numéro de version à chaque fois que je construis. Voir les instructions pour que ci-dessous.

  • Version 1.0.0 peut-être construire 542. Il a fallu 542 construit pour arriver à un 1.0.0 version.
  • Version 1.0.1 peut-être construire 578.
  • Version 1.1.0 peut-être construire 694.
  • La version 2.0.0 peut-être construire 949.

D'autres développeurs, y compris Apple, le numéro de version comprend une version majeure + mineure de la version + nombre de builds pour la libération. Ce sont les vraies numéros de version de logiciel, par opposition aux valeurs utilisées pour le marketing.

Si vous allez à Xcode menu > Sur Xcode, vous verrez la Version et le numéro de Build. Si vous avez touché le Plus d'Infos... bouton, vous verrez un tas de versions différentes. Depuis Plus d'Infos... bouton a été supprimé dans Xcode 5, cette information est également disponible à partir du Logiciel > Développeur section du Système d'Information de l'app, disponible par l'ouverture de l'Apple menu > à Propos de Ce Mac > Système de Rapport....

Par exemple, Xcode 4.2 (4C139). La commercialisation de la version 4.2 est Construire majeures de la version 4, Construire des mineurs de la version C, et le numéro de Build 139. La prochaine version (sans doute 4.3) sera probablement Construire libération 4D, et le numéro de version de recommencer à 0 et d'un incrément à partir de là.

Le Simulateur d'iPhone, la Version et le numéro de Build est de la même manière, comme le sont les iphone, Mac, etc.

  • 3.2: (7W367a)
  • 4.0: (8A400)
  • 4.1: (8B117)
  • 4.2: (8C134)
  • 4.3: (8H7)

Mise à jour: à la demande, voici les étapes à suivre pour créer un script qui s'exécute chaque fois que vous construisez votre application dans Xcode pour lire le numéro de version, l'incrémenter, et de l'écrire à l'application de l' {App}-Info.plist le fichier. Il y a en option, des étapes supplémentaires si vous souhaitez écrire votre version et le numéro de build de votre Settings.bundle/Root*.plist fichier(s).

Il est prolongé de l'article ici.

Dans Xcode 4.2 - 5.0:

  1. Charge votre projet Xcode.
  2. Dans le volet de gauche, cliquez sur votre projet tout en haut de la hiérarchie. Cela va charger les paramètres du projet de l'éditeur.
  3. Sur le côté gauche de la fenêtre du centre de volet, cliquez sur votre application en vertu de l' CIBLES à la tête. Vous aurez besoin de configurer cette configuration pour chaque cible du projet.
  4. Sélectionnez les Phases de construction de l'onglet.
    • Dans Xcode 4, en bas à droite, cliquez sur le Ajouter de la Phase de construction bouton et sélectionnez Ajouter Exécuter le Script.
    • Dans Xcode 5, sélectionnez l'Éditeur de menu > Ajouter Phase de construction > Ajouter Exécuter le Script Phase de construction.
  5. Faites glisser et déposez le nouveau Exécuter le Script de phase pour le déplacer, juste avant la Copie Bundle de Ressources de phase (lorsque l'application-info.fichier plist sera livré avec votre application).
  6. Dans le nouveau Exécuter le Script phase, jeu de Shell: /bin/bash.
  7. Copiez et collez le texte suivant dans la zone de script pour entier numéros de build:

    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
    buildNumber=$(($buildNumber + 1))
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
    

    @Bdebeez souligné, l' Apple Générique de gestion des versions de l'Outil (agvtool) est également disponible. Si vous préférez l'utiliser à la place, alors il ya un couple de choses à changer d'abord:

    • Sélectionnez les Paramètres de construction de l'onglet.
    • En vertu de la gestion des versions section, définir le Projet en cours de la Version de la génération initiale numéro que vous souhaitez utiliser, par exemple, 1.
    • De retour sur les Phases de construction de l'onglet, de glisser-déposer votre Exécuter le Script de la phase après la Copie Bundle de Ressources de phase pour éviter une situation de concurrence en essayant à la fois de construire et de mettre à jour le fichier source qui inclut votre numéro de build.

    A noter qu'avec l' agvtool méthode, vous pouvez toujours obtenir périodiquement échec/annulé construit avec aucune erreur. Pour cette raison, je ne recommandons pas d'utiliser des agvtool avec ce script.

    Néanmoins, dans votre Exécuter le Script , vous pouvez utiliser le script suivant:

    "${DEVELOPER_BIN_DIR}/agvtool" next-version -all
    

    L' next-version argument incrémente le numéro de version (bump est aussi un alias pour la même chose), et -all mises à jour Info.plist avec le nouveau numéro de version.

  8. Et si vous avez des Paramètres de l'ensemble où vous afficher la Version et de Build, vous pouvez ajouter le texte suivant à la fin du script de mise à jour de la version et de build. Remarque: le Changement de l' PreferenceSpecifiers les valeurs qui correspondent à vos paramètres. PreferenceSpecifiers:2 signifie regarder au niveau de l'élément à l'index 2 en vertu de l' PreferenceSpecifiers 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.

    productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    

    Si vous utilisez agvtool au lieu de lire l' Info.plist directement, vous pouvez ajouter les éléments suivants à votre script à la place:

    buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse)
    productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1)
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    
  9. Et si vous avez une application universelle pour iPad et iPhone, alors vous pouvez aussi définir les paramètres de l'iPhone fichier:

    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist    
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist
    

72voto

Yar Points 25421

Laissant ici de ma propre référence. Cela permettra de montrer de version et de build pour la "version" et "construire" des champs que vous voyez dans un XCode cible:

- (NSString*) version {
    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    return [NSString stringWithFormat:@"%@ build %@", version, build];
}

REMARQUE: le Code a changé à l'ARC et de la conserver à libération convivialité grâce à un commentaire de @nekno.

53voto

Bdebeez Points 2066

Le numéro de version interne est un nombre qui indique l'état actuel de l'application. Il diffère du numéro de Version dans que c'est généralement pas l'utilisateur de face et de ne pas dénoter une différence/fonctionnalités/améliorations comme un numéro de version habituelle.

Pensez-y comme ça:

  • Construire (CFBundleVersion): le numéro de La version. Vous commencez généralement ce à 1 et augmente de 1 à chaque build de l'application. Il permet rapidement pour les comparaisons dont la construction est plus récente, et il indique le sens d'avancement de la base de code. Ceux-ci peuvent être massivement précieux lorsque l'on travaille avec AQ et qui ont besoin d'être sûr que les bugs sont enregistrés contre le droit des constructions.
  • La commercialisation de la Version (CFBundleShortVersionString): L'utilisateur face du numéro que vous utilisez pour désigner cette version de votre application. Habituellement, cela suit l'un des Principaux.mineur schéma de version (par exemple, MyAwesomeApp 1.2) pour permettre aux utilisateurs de savoir quelles versions sont plus petites mises à jour de maintenance et qui sont une grosse affaire de nouvelles fonctionnalités.

Pour utiliser efficacement dans vos projets, Apple fournit un excellent outil, agvtool. Je recommande fortement d'utiliser ce que c'est BEAUCOUP plus simple de script jusqu'plist changements. Il vous permet de définir à la fois le numéro de build et la commercialisation de la version. Il est particulièrement utile lors de la création de scripts (par exemple, la mise à jour facilement le numéro de version sur chaque construction ou même de l'interrogation que l'actuel numéro de build est). Il peut même faire plus exotique des choses comme la balise de votre SVN pour vous lorsque vous mettez à jour le numéro de version.

Pour l'utiliser:

  • Définir votre projet dans Xcode, sous contrôle de version, pour une utilisation "Apple Générique".
  • Dans le terminal
    • agvtool new-version 1 (pour définir le numéro de Build de 1)
    • agvtool new-marketing-version 1.0 (ensemble de la Commercialisation de la version 1.0)

Voir la page de man de agvtool pour une tonne de bonnes infos

25voto

ale84 Points 501

Le script d'auto-incrémentation du numéro de version dans la réponse ci-dessus ne fonctionne pas pour moi si le numéro de version est une valeur à virgule flottante, alors je l'ai modifié un peu:

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=`echo $buildNumber +1|bc`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

21voto

Viktor Lexington Points 3068

Le marketing numéro de version est pour les clients, est appelé le numéro de version. Il commence avec la 1.0 et va jusqu'pour les mises à jour majeures de 2.0, 3.0, pour des mises à jour mineures 1.1, 1.2 et pour les corrections de bugs de la version 1.0.1, 1.0.2 . Ce nombre est orientée sur les rejets et les nouvelles fonctionnalités.

Le numéro de build est surtout l' interne nombre de constructions qui ont été faites jusqu'alors. Mais certains l'utilisent d'autres chiffres, comme le numéro de la succursale du référentiel. Ce numéro doit être unique pour distinguer les différents près de la même construit.

Comme vous pouvez le voir, le numéro de version n'est pas nécessaire et c'est à vous de laquelle le numéro de build que vous souhaitez utiliser. Donc, si vous mettez à jour votre Xcode d'une version majeure, la construire champ est vide. La version de champ ne peut être vide!.


Pour obtenir le construire le nombre comme un NSString variable:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

Pour obtenir la version nombre en NSString variable:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

Si vous voulez à la fois dans un NSString:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

C'est testé avec Xcode Version 4.6.3 (4H1503). Le numéro de build est souvent écrit dans la parenthèse / accolades. Le numéro de build est en décimal ou hexadécimal.

buildandversion


Dans Xcode , vous pouvez auto-incrémenter le numéro de build comme un nombre décimal en plaçant les éléments suivants dans l' Run script phase de construction dans les paramètres du projet

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

Pour hexadécimal numéro de build utiliser ce script

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber)) 
buildNumber=$(($buildNumber + 1)) 
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

project_settings

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X