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?
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"];
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42
@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"
NSBundle *bundle = [NSBundle mainBundle];
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
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.
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"]
En rapide:
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String