2010-10-30 10 views

Antwort

193

Sie können Ihre Info.plist als Wörterbuch mit

[[NSBundle mainBundle] infoDictionary] 

und Sie können leicht erhalten die Version auf der CFBundleVersion Schlüssel diese Weise lesen.

Schließlich können Sie die Version erhalten mit

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

Perfect. Das ist viel einfacher als alle Zeilen von CF * -Funktionen, die ich benutzt habe ... Ich war mir sicher, dass es einen schnellen Weg gab, das NSDictionary zu bekommen. – Stew

+16

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

+20

Hinweis in Xcode4 Wenn Sie sich das Übersichtsfenster des Ziels ansehen, werden die Felder Version und Erstellen angezeigt. 'CFBundleVersion' wurde als Build und Version als' CFBundleShortVersionString' verwendet. – memmons

4

Ich weiß, dass einige Zeit seit der Quest bestanden hat und die Antwort.

Seit iOS8 funktioniert die angenommene Antwort möglicherweise nicht.

Dies ist die neue Art und Weise, es jetzt zu tun:

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

Haben Sie einen Link, warum das so ist? –

3

nun in iOS 8 beide Felder erforderlich sind. Früher funktioniert es ohne die CFBundleShortVersionString. Aber jetzt ist es ein erforderliches Plist-Feld, um jede App im App Store einzureichen. Und kCFBundleVersionKey wird für das Hochladen jedes neuen Builds verglichen, das in inkrementeller Reihenfolge sein muss. Speziell für TestFlight-Builds. Ich mache es auf diese Weise,

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

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

+0

@ RDC danke. –

6

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

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String 
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String