web-dev-qa-db-fra.com

Comment afficher par programme le numéro de version / build de la cible dans l'application iOS?

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.

129
slim

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.


Pour obtenir le numéro version:

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

Pour obtenir le numéro build:

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   

Si vous voulez les deux en un:

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))"

Remarques:

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.

buildandversion


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:

Étape 1

step1

Étape 2

step2

Étape 3

step3

374
Binarian

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:

https://github.com/goktugyil/EZSwiftExtensions

11
Esqarrouth

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
5
tanaschita

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) )"
4
Sandip Patel - SM