2010-10-30 7 views

Répondre

193

Vous pouvez lire votre Info.plist comme un dictionnaire avec

[[NSBundle mainBundle] infoDictionary] 

Et vous pouvez facilement obtenir la version à la CFBundleVersion cette façon clé.

Enfin, vous pouvez obtenir la version avec

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary]; 
NSString* version = [infoDict objectForKey:@"CFBundleVersion"]; 
+0

Parfait. C'est beaucoup plus simple que toutes les lignes de fonctions CF * que j'utilisais ... J'étais sûr qu'il devait y avoir un moyen rapide d'obtenir le NSDictionary. – Stew

+16

Pour le numéro de version, cela n'a pas d'importance, mais pour les autres clés, vous pouvez utiliser 'objectForInfoDictionaryKey:' à la place, car il renvoie la valeur localisée si disponible: '[[NSBundle mainBundle] objectForInfoDictionaryKey: @" CFBundleDisplayName "]' – Zargony

+20

Notez dans Xcode4 que si vous regardez le panneau récapitulatif de la cible, vous verrez les champs Version et Construction. 'CFBundleVersion' a été modifié pour être Build et la version est' CFBundleShortVersionString'. – memmons

4

Je sais que peu de temps a passé depuis que la recherche et la réponse.

Depuis iOS8, la réponse acceptée peut ne pas fonctionner.

Ceci est la nouvelle façon de le faire maintenant: Maintenant

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey); 
+6

Avez-vous un lien vers pourquoi c'est ainsi? –

3

dans iOS 8, les deux champs sont nécessaires. Auparavant, il fonctionne sans le CFBundleShortVersionString. Mais maintenant, il s'agit d'un champ obligatoire pour soumettre une application dans le magasin d'applications. Et kCFBundleVersionKey est comparé pour télécharger chaque nouvelle construction, qui doit être dans l'ordre croissant. Spécialement pour les versions de TestFlight. Je le fais de cette façon,

NSString * version = nil; 
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 
    if (!version) { 
     version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 
    } 
+0

Merci .. ** version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; ** travaillé pour moi – swiftBoy

+0

@RDC merci. –

6

pour les utilisateurs Swift:

if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") { 
    print("version is : \(version)") 
} 

pour les utilisateurs swift3:

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") { 
    print("version is : \(version)") 
} 
2

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String 
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String 
Questions connexes