web-dev-qa-db-fra.com

Référez-vous au numéro de build ou au numéro de version dans le code

Il est facile de définir manuellement les numéros de version et de version dans Xcode, et j'ai appris à les incrémenter avec une macro au moment de la construction. Mais comment référencer leurs valeurs dans le code?

41
RobertL

Bien sûr, vous pouvez demander à votre bundle principal le répertoire info qui inclut toutes les clés et valeurs de votre info.plist, y compris le numéro de version:

NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleShortVersionString"];
75
JustSid
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 
88
Andrew Madsen

@robo J'ai suivi un article sur la procédure d'auto-incrémentation du numéro de build (pas le numéro de version, mais il est très similaire) mais maintenant je ne le trouve pas. Je vais essayer d'expliquer ce que j'ai fait. J'espère que c'est assez clair pour suivre.

Dans Xcode 4, recherchez dans le volet Navigateur, le volet situé à gauche de l'écran Xcode. Il a 7 icônes en haut. Sélectionnez l'icône la plus à gauche (qui ressemble à un dossier) pour afficher le volet Navigateur de projet. 

Maintenant, cliquez sur le premier élément de ce volet, qui est le projet lui-même. Cela ouvre une grande fenêtre au centre avec une colonne étroite à gauche de celle-ci. 

La colonne étroite comporte 2 sections: "PROJET" ET "CIBLES". Cliquez sur le nom de votre projet dans la section "CIBLES". Le volet central comporte maintenant 5 onglets en haut: "Résumé", "Informations", "Paramètres de construction", "Phases de construction" et "Règles de construction". 

Cliquez sur l'onglet "Build Phases". Si votre configuration est identique à la mienne, vous verrez maintenant 4 sections dans la fenêtre principale: "Dépendances cibles", "Copier les ressources du paquet", "Compiler les sources" et "Lien ...". Cliquez sur "Ajouter une phase de construction" (dans le coin inférieur droit) et choisissez "Ajouter un script d'exécution". Une cinquième section apparaît maintenant dans le volet central avec le titre "Exécuter le script". Faites glisser la section "Exécuter le script" afin qu'elle soit la deuxième section à partir du haut, juste en dessous de "Dépendances cibles".

Cliquez maintenant sur le triangle d'affichage de la section Exécuter le script. Cela ouvre une fenêtre où vous pouvez mettre un script. Copiez et collez le script suivant dans cette fenêtre.

#!/bin/bash    
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
bN=$((0x$bN)) 
bN=$(($bN + 1)) 
bN=$(printf "%X" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"

Assurez-vous que l'option "Exécuter le script uniquement lors de l'installation" n'est PAS VÉRIFIÉE.

C'est tout! Maintenant, votre numéro de build s’incrémente automatiquement chaque fois que vous construisez votre projet.

Ce script suppose que vous avez un numéro de construction hexadécimal dans votre fichier info.plist et l’augmente au format hexadécimal. Je ne sais pas ce que cela fait si le numéro de build est manquant. Mais il est facile de saisir une valeur de départ - il suffit d’aller dans l’onglet "Résumé" du même volet central que précédemment et de saisir "1" (ou la valeur de votre choix) dans le champ "Construire" (mais pas un chaîne comme 1.0).


Je pense que le script hexagonal que j'ai donné en premier n'est pas valide pour soumission à l'App Store. Voici le même script utilisant l'arithmétique décimale.

#!/bin/bash    
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
((bN += 1))
bN=$(printf "%d" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"
13
RobertL
NSBundle *bundle = [NSBundle mainBundle];   
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
12
Conrad Shultz

Puisque ces valeurs sont stockées dans le Info.plist de votre application, vous pouvez le lire via les méthodes fournies dans NSBundle:

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString];

Voir Accès au contenu des ensembles en tant que référence faisant autorité pour obtenir les données de votre fichier Info.plist et Clés Core Foundation pour les clés Info.plist disponibles.

4
Jonah

Vous pouvez obtenir les valeurs info.plist avec ce morceau de code (remplacez CFBundleShortVersionString par la clé de info.plist que vous voulez voir Touches recommandées pour info.plist )

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
4
Damien Debin

En rapide:

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
0
Halyna Rubashko