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.