Voglio leggere le informazioni sulla versione del bundle da Info.plist nel mio codice, preferibilmente come stringa. Come posso fare questo?
Voglio leggere le informazioni sulla versione del bundle da Info.plist nel mio codice, preferibilmente come stringa. Come posso fare questo?
Risposte:
Puoi leggere il tuo Info.plist come un dizionario con
[[NSBundle mainBundle] infoDictionary]
E puoi facilmente ottenere la versione alla CFBundleVersion
chiave in questo modo.
Infine, puoi ottenere la versione con
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
invece, poiché restituisce il valore localizzato se disponibile:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
è stato riproposto per essere Build e Version è CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
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)")
}
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);
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 kCFBundleVersionKey
viene 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];
}
Swift 3:
let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String