Comment puis-je obtenir par programme la valeur de la target version
, comme dans l'image ci-dessous?
Comme on le voit dans la fenêtre Propriétés de la cible de mon projet Xcode. Je souhaite afficher ceci dans l'écran de démarrage de mon application afin de savoir quelle version les personnes utilisent actuellement.
Il y a 2 numéros!
Le numéro de version marketing est destiné aux clients, appelé numéro de version. Il commence par 1.0 et monte pour les mises à jour majeures à 2.0 , 3.0 , pour les mises à jour mineures de 1.1 , 1.2 et pour les corrections de bugs apportées à 1.0.1 , 1.0. 2 . Ce nombre est orienté sur les versions et les nouvelles fonctionnalités. Il ne doit pas nécessairement s’arrêter à 9 h . 1.11.23 est un numéro de version raisonnable.
Le numéro de build est principalement le nombre interne de builds qui ont été créés jusque-là. Mais certains utilisent d'autres numéros, tels que le numéro de branche du référentiel ou son numéro de validation. Ce nombre doit être unique pour distinguer les différentes versions, qui ne comportent que des modifications incrémentielles mineures.
Objectif c:
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
Swift <3.0:
let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
Swift 3.0+ (testé avec la version 5.0):
let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
Objectif c:
NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Swift <3.0:
let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Swift 3.0+ (testé jusqu'à la version 5.0):
let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Commencez par utiliser les lignes ci-dessus, puis la suivante.
Objectif c:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (testé jusqu'à 5.0):
let versionAndBuildNumber: String = "\(versionNumber) (\(buildNumber))"
Les valeurs du bundle principal ne sont pas toujours présentes. Par exemple, dans une application en ligne de commande, il n'y a pas de CFBundleShortVersionString
ni CFBundleVersion
. Les méthodes renvoient donc nil
et se bloquent. parce que dans le code, il fait un downcast incorrect. Mais dans les applications Cocoa iOS et Mac normales, ces valeurs sont définies et ne seront pas supprimées.
Ceci est testé avec Xcode version 7.3 (7D175) . 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 auto-incrémenter le numéro de compilation en tant que nombre décimal en plaçant le texte suivant dans le 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 construction, utilisez 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"
Pour Xcode
, procédez comme suit:
Vous n'avez pas besoin de changer quoi que ce soit dans votre projet ou Xcode. Voici la version Swift pour les deux séparément:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
C'est inclus dans ce repo, allez voir:
Voici le même code pour Swift:
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Affiche par programme la version et le numéro de build - Swift 4.
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"
let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"