Przeczytaj wersję z Info.plist


Odpowiedzi:


202

Możesz czytać swoją Info.plist jako słownik z

[[NSBundle mainBundle] infoDictionary]

W ten sposób możesz łatwo uzyskać wersję pod CFBundleVersionkluczem.

Wreszcie możesz pobrać wersję z

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

Idealny. To o wiele prostsze niż wszystkie wiersze funkcji CF *, których używałem ... Byłem pewien, że musiał istnieć szybki sposób na zdobycie NSDictionary.
Gulasz

16
Dla numeru wersji nie ma to znaczenia, ale w przypadku innych kluczy, których możesz chcieć użyć objectForInfoDictionaryKey:zamiast tego, ponieważ zwraca on zlokalizowaną wartość, jeśli jest dostępna:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony

20
Uwaga w Xcode4, jeśli spojrzysz na panel podsumowania celu, zobaczysz pola Wersja i kompilacja. CFBundleVersionzostał zmieniony na kompilację, a wersja to CFBundleShortVersionString.
memmons

5
Spowoduje to pobranie wersji i numeru kompilacji i sformatowanie ich razem: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks

użyj CFBundleShortVersionString jako klucza dla metody objectForKey.
ayalcinkaya

11

dla użytkowników Swift:

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

dla użytkowników Swift3:

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

5

Wiem, że od poszukiwania i odpowiedzi minęło trochę czasu.

Od iOS8 zaakceptowana odpowiedź może nie działać.

Oto nowy sposób na zrobienie tego teraz:

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

6
Czy masz link wyjaśniający, dlaczego tak jest?
Ian Warburton

4

Teraz w iOS 8 oba pola są konieczne. Wcześniej działa bez rozszerzenia CFBundleShortVersionString. Ale teraz wymagane jest pole plist, aby przesłać dowolną aplikację w sklepie z aplikacjami. I kCFBundleVersionKeyjest porównywany z przesyłaniem każdej nowej kompilacji, która musi być w kolejności przyrostowej. Specjalnie dla kompilacji TestFlight. Robię to w ten sposób

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

Dzięki .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; pracował dla mnie
swiftBoy

3

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.