Lesen Sie die Version von Info.plist


Antworten:


201

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 CFBundleVersionSchlüssel erhalten.

Schließlich können Sie die Version mit erhalten

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

Perfekt. Das ist viel einfacher als alle Zeilen mit CF * -Funktionen, die ich verwendet habe ... Ich war mir sicher, dass es einen schnellen Weg gegeben haben muss, um das NSDictionary zu erhalten.
Eintopf

16
Für die Versionsnummer spielt dies keine Rolle, aber für andere Schlüssel möchten Sie möglicherweise objectForInfoDictionaryKey:stattdessen verwenden, da der lokalisierte Wert zurückgegeben wird, falls verfügbar:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony

20
Beachten Sie, dass in Xcode4, wenn Sie sich das Zusammenfassungsfenster des Ziels ansehen, die Felder Version & Build angezeigt werden. CFBundleVersionwurde für Build und Version umfunktioniert CFBundleShortVersionString.
Memmons

5
Dadurch werden sowohl die Versions- als auch die Build-Nummer NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
abgerufen

Verwenden Sie CFBundleShortVersionString als Schlüssel für die objectForKey-Methode.
Ayalcinkaya

11

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)")
}

5

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);

6
Haben Sie einen Link, warum dies so ist?
Ian Warburton

4

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 kCFBundleVersionKeywird 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];
    }

Danke .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; arbeitete für mich
swiftBoy

3

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.