2010-10-30 3 views

risposta

193

Puoi leggere il tuo Info.plist come un dizionario con

[[NSBundle mainBundle] infoDictionary] 

E si può facilmente ottenere la versione al CFBundleVersion chiave in quel modo.

Infine, è possibile ottenere la versione con

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

Perfetto. È molto più semplice di tutte le linee delle funzioni CF * che stavo usando ... Ero sicuro che ci doveva essere un modo veloce per ottenere il NSDictionary. – Stew

+16

Per il numero di versione, questo non ha importanza, ma per le altre chiavi si potrebbe voler usare 'objectForInfoDictionaryKey:' invece, poiché restituisce il valore localizzato se disponibile: '[[NSBundle mainBundle] objectForInfoDictionaryKey: @" CFBundleDisplayName "]' – Zargony

+20

Nota in Xcode4 se guardi il pannello di riepilogo del target vedrai i campi di Version & Build. 'CFBundleVersion' è stato riproposto come Build e Version è' CFBundleShortVersionString'. – memmons

4

So che è passato del tempo da quando la ricerca e la risposta.

Poiché iOS8 la risposta accettata potrebbe non funzionare.

Questo è il nuovo modo per farlo ora:

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

Hai un link al motivo per cui è così? –

3

Ora in iOS 8 sono necessari entrambi i campi. In precedenza funziona senza lo CFBundleShortVersionString. Ma ora è necessario un campo Plist per inviare qualsiasi app nell'app store. E kCFBundleVersionKey viene confrontato per il caricamento di ogni nuova build, che deve essere in ordine incrementale. Specialmente per le build di TestFlight. Lo faccio in questo modo,

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

Grazie .. ** version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; ** ha funzionato per me – swiftBoy

+0

@RDC grazie. –

6

per gli utenti Swift:

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

per gli utenti 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