Leggi la versione da Info.plist


Risposte:


201

Puoi leggere il tuo Info.plist come un dizionario con

[[NSBundle mainBundle] infoDictionary]

E puoi facilmente ottenere la versione alla CFBundleVersionchiave in questo modo.

Infine, puoi ottenere la versione con

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

Perfetto. È molto più semplice di tutte le linee di funzioni CF * che stavo usando ... Ero sicuro che ci doveva essere un modo rapido per ottenere NSDictionary.
Stufato

16
Per il numero di versione, questo non ha importanza, ma per altre chiavi potresti 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 Version & Build. CFBundleVersionè stato riproposto per essere Build e Version è CFBundleShortVersionString.
memmons

5
Questo recupererà sia la versione che il numero di build e li formatterà insieme: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks

utilizzare CFBundleShortVersionString come chiave per il metodo objectForKey.
ayalcinkaya

11

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

5

So che è passato del tempo dalla ricerca e dalla 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 collegamento al motivo per cui è così?
Ian Warburton

4

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

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

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

3

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.