Il y a 2 numéros!
Le numéro de version marketing est pour les clients, appelé numéro de version . Il commence par 1.0 et monte pour les mises à jour majeures vers 2.0 , 3.0 , pour les mises à jour mineures vers 1.1 , 1.2 et pour les corrections de bogues vers 1.0.1 , 1.0.2 . Ce numéro est orienté sur les versions et les nouvelles fonctionnalités. Il ne doit pas s'arrêter à 9, 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é réalisés jusque-là. Mais certains utilisent d'autres nombres comme le numéro de branche du référentiel ou son numéro de validation. Ce numéro doit être unique pour distinguer les différentes versions, qui n'ont que des modifications incrémentielles mineures.
Pour obtenir le numéro de 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 5.0):
let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
Pour obtenir le numéro de 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'à 5.0):
let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Si vous voulez les deux en un:
Utilisez d'abord les lignes ci-dessus, puis la suivante.
Objectif c:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (testé jusqu'à 5.0):
let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"
Remarques:
Les valeurs du bundle principal ne sont pas toujours présentes, par exemple dans une application de ligne de commande, il n'y a pas de CFBundleShortVersionString
ou CFBundleVersion
, donc les méthodes retourneront nil
et cela plantera car dans le code, cela 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 incrémenter automatiquement le numéro de version sous forme de nombre décimal en plaçant ce qui suit dans la 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 le numéro de version hexadécimal, 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
faire ce qui suit:
Étape 1
Étape 2
Étape 3
Bundle.main.object(forInfoDictionaryKey: "...")
maintenant.Vous n'avez rien à changer dans votre projet ou Xcode. Voici la version Swift pour les deux séparément:
Il est inclus dans ce dépôt, vérifiez-le:
https://github.com/goktugyil/EZSwiftExtensions
la source
Bundle.main.object(forInfoDictionaryKey: "...")
maintenant.Voici le même code pour Swift 3 :
la source
Bundle.main
avait un videinfoDictionary
pour moi; peut-être parce que je le fais à partir d'un cadre, pas d'un exécutable ou d'une application?Bundle(for: MyClass.self)
contient les valeurs attendues.Afficher la version et le numéro de build par programme - Swift 4.0
la source
Vous pouvez également utiliser comme
Ensuite, vous pouvez utiliser n'importe où lorsque vous déclarez Globalement.
Production:
la source
J'ai fait une extension pour Bundle donc ce sera facile à utiliser
la source