Chcę wczytać informacje o wersji pakietu z Info.plist do mojego kodu, najlepiej jako ciąg. Jak mogę to zrobić?
Chcę wczytać informacje o wersji pakietu z Info.plist do mojego kodu, najlepiej jako ciąg. Jak mogę to zrobić?
Odpowiedzi:
Możesz czytać swoją Info.plist jako słownik z
[[NSBundle mainBundle] infoDictionary]
W ten sposób możesz łatwo uzyskać wersję pod CFBundleVersion
kluczem.
Wreszcie możesz pobrać wersję z
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
zamiast tego, ponieważ zwraca on zlokalizowaną wartość, jeśli jest dostępna:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
został zmieniony na kompilację, a wersja to CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
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)")
}
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);
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 kCFBundleVersionKey
jest 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];
}
Swift 3:
let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String