Comment obtenir la version actuelle de mon projet iOS dans le code?
152
Je voudrais pouvoir obtenir la version actuelle de mon projet / application iOS en tant NSStringqu'objet sans avoir à définir une constante dans un fichier quelque part. Je ne veux pas changer la valeur de ma version à deux endroits.
La valeur doit être mise à jour lorsque je passe ma version dans le résumé de la cible du projet.
Vous pouvez obtenir la version et les numéros de build comme suit:
let version =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!Stringlet build =Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String
ou en Objective-C
NSString* version =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];NSString* build =[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey];
J'ai les méthodes suivantes dans une catégorie sur UIApplication:
extension UIApplication{staticvar appVersion:String{returnBundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!String}staticvar appBuild:String{returnBundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String}staticvar versionBuild:String{let version = appVersion, build = appBuild
return version == build ?"v\(version)":"v\(version)(\(build))"}}
Vous pouvez utiliser cette [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleVersion"] au lieu de [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *) kCFBundleVersionKey] .La Ancien semble rimer bien avec [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString" ]; donc Maintenant, il est devenu facile de garder en mémoire
Durai Amuthan.H
4
@Duraiamuthan Je recommanderais d'utiliser (NSString *)kCFBundleVersionKeyplutôt que @"CFBundleVersion". Même s'il est plus long à taper (la saisie semi-automatique aidera ici), car c'est une constante, elle est vérifiée au moment de la compilation.
Ashley Mills
Btw, il serait plus précis d'activer cette extension au NSBundlelieu de UIApplicationcela permettra également de remplacer les appels statiques par ceux d'instance.
Zapko
@Zapko - Je suis respectueusement en désaccord. Conceptuellement, cela correspond UIApplication, car les informations renvoyées concernent l'application. De plus, cela ne s'applique qu'au mainbundle - cela n'aurait aucun sens d'en faire une méthode d'instance sur n'importe quel bundle.
Ashley Mills
Vouliez-vous dire buildquand vous avez dit appBundle(dans la deuxième ligne de votre code)?
user1046037
14
Voici ce qui a fonctionné sur Xcode 8, Swift 3:
let gAppVersion =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")??"0"let gAppBuild =Bundle.main.object(forInfoDictionaryKey:"CFBundleVersion")??"0"print("Version: \(gAppVersion)")print("Build: \(gAppBuild)")
Dans Swift, vous pouvez obtenir la version du bundle en utilisant:
let info:NSDictionary=NSBundle.mainBundle().infoDictionary!let version:String= info.objectForKey("CFBundleShortVersionString")as!String
versionLabel.text ="Version:"+ version
Pour obtenir la valeur localisée de n'importe quelle clé, vous devez utiliser CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
Voici donc une version Swift pour les deux séparément:
let versionNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")as!Stringlet buildNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion")as!String
(NSString *)kCFBundleVersionKey
plutôt que@"CFBundleVersion"
. Même s'il est plus long à taper (la saisie semi-automatique aidera ici), car c'est une constante, elle est vérifiée au moment de la compilation.NSBundle
lieu deUIApplication
cela permettra également de remplacer les appels statiques par ceux d'instance.UIApplication
, car les informations renvoyées concernent l'application. De plus, cela ne s'applique qu'aumain
bundle - cela n'aurait aucun sens d'en faire une méthode d'instance sur n'importe quel bundle.build
quand vous avez ditappBundle
(dans la deuxième ligne de votre code)?Voici ce qui a fonctionné sur Xcode 8, Swift 3:
la source
Dans l'objectif C:
1) Pour obtenir la version de l'application, vous devez utiliser un:
2) Pour obtenir la version Build, vous devez utiliser un:
la source
Dans Swift, vous pouvez obtenir la version du bundle en utilisant:
la source
Un de mes projets open source, App Update Tracker , offre cette fonctionnalité (et plus) sous la forme de méthodes de classe:
+ (NSString *)getShortVersionString
+ (NSString *)getLongVersionString
Vous l'utiliseriez comme ceci:
la source
Juste pour note
Pour obtenir la valeur localisée de n'importe quelle clé, vous devez utiliser
CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
la source
Voici donc une 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