Ich möchte die Versionsinformationen des Bundles aus Info.plist in meinen Code einlesen, vorzugsweise als Zeichenfolge. Wie kann ich das machen?
Ich möchte die Versionsinformationen des Bundles aus Info.plist in meinen Code einlesen, vorzugsweise als Zeichenfolge. Wie kann ich das machen?
Antworten:
Sie können Ihre Info.plist als Wörterbuch mit lesen
[[NSBundle mainBundle] infoDictionary]
Und auf diese Weise können Sie die Version ganz einfach am CFBundleVersion
Schlüssel erhalten.
Schließlich können Sie die Version mit erhalten
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
stattdessen verwenden, da der lokalisierte Wert zurückgegeben wird, falls verfügbar:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
wurde für Build und Version umfunktioniert CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
für Swift-Benutzer:
if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
print("version is : \(version)")
}
für Swift3-Benutzer:
if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
print("version is : \(version)")
}
Ich weiß, dass seit der Suche und der Antwort einige Zeit vergangen ist.
Seit iOS8 funktioniert die akzeptierte Antwort möglicherweise nicht mehr.
Dies ist der neue Weg, dies jetzt zu tun:
NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
In iOS 8 sind jetzt beide Felder erforderlich. Früher funktioniert es ohne die CFBundleShortVersionString
. Jetzt ist es jedoch erforderlich, eine App im App Store einzureichen. Und kCFBundleVersionKey
wird für das Hochladen jedes neuen Builds verglichen, der in inkrementeller Reihenfolge erfolgen muss. Speziell für TestFlight-Builds. Ich mache es so,
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