it-swarm.com.de

Versions- und Build-Informationen mit Swift abrufen

Ich versuche, auf das Haupt-NSBundle zuzugreifen, um Informationen zu Version und Build abzurufen. Die Sache ist, ich möchte es in Swift versuchen, ich weiß, wie ich es in Objective-C mit Build.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; abrufen kann. Ich weiß nicht, wo ich mit Swift anfangen soll, ich habe versucht, es in der neuen Syntax ohne Erfolg zu schreiben.

71
Ken-UbiDex

Was war los mit der Swift-Syntax? Das scheint zu funktionieren:

if let text = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
    print(text)
}
126
Connor

Swift 3/4 Version

func version() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as! String
    let build = dictionary["CFBundleVersion"] as! String
    return "\(version) build \(build)"
} 

Swift 2.x Version

func version() -> String {
    let dictionary = NSBundle.mainBundle().infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as String
    let build = dictionary["CFBundleVersion"] as String
    return "\(version) build \(build)"
}

wie gesehen hier .

90
Dan Rosenstark

Für die endgültige Version von Xcode 6 verwenden

NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String

Das "?" Zeichen nach infoDictionary ist hier wichtig

17
JulianM

Schneller Weg für AppName, AppVersion und BuildNumber...

if let dict = NSBundle.mainBundle().infoDictionary {
   if let version = dict["CFBundleShortVersionString"] as? String,
       let bundleVersion = dict["CFBundleVersion"] as? String,
       let appName = dict["CFBundleName"] as? String {
           return "You're using \(appName) v\(version) (Build \(bundleVersion))."
   }
}
9
Chris

// Gibt die Versionsnummer der App zurück

public static var appVersion: String? {
    return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
}

// Gib die Build-Nummer der App zurück

public static var appBuild: String? {
    return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String
}
7
Pratyush Pratik

In Swift würde ich es als Erweiterung für UIApplication machen, wie folgt:

extension UIApplication {

    func applicationVersion() -> String {

        return NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
    }

    func applicationBuild() -> String {

        return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as! String
    }

    func versionBuild() -> String {

        let version = self.applicationVersion()
        let build = self.applicationBuild()

        return "v\(version)(\(build))"
    }
}

Dann können Sie einfach folgendes verwenden, um alles zu bekommen, was Sie brauchen:

let version = UIApplication.sharedApplication.applicationVersion() // 1
let build = UIApplication.sharedApplication.applicationBuild() // 80
let both = UIApplication.sharedApplication.versionBuild() // 1(80)
7
Jiri Trecak

Hier ist ein einfacher Weg, um Build und Version zu erhalten. 

Für Swift 4.X

 if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
     print(version)
   }

 if let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
     print(build)
   }

Für Ziel C

NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

NSString * currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

Lassen Sie mich wissen, ob es Probleme gibt. Das funktioniert für mich.

6
Ashu

Dieser Code funktioniert für Swift 3, Xcode 8:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"
2
Crashalot

[Update: Xcode 6.3.1] Ich habe alle oben genannten Schritte ausprobiert und keines davon funktioniert in Xcode 6.3.1.

(NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String)!
1
SunburstEnzo

Bei Swift 3 wird NSBundle durch Bundle und MainBundle ersetzen einfach durch main ersetzt.

let AppVersion = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
1
Tarika Chawla

Eine weitere Möglichkeit besteht darin, die Variablen in AppDelegate zu definieren:

var applicationVersion:String {
    return NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
}
var applicationBuild:String  {
    return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as! String
}
var versionBuild:String  {
    let version = self.applicationVersion
    let build = self.applicationBuild
    return "version:\(version) build:(\(build))"
}

das kann als Variable in AppDelegate referenziert werden

1
user3620768

Um ein Ergebnis für das Framework zu haben, können Sie verwenden

let version = Bundle(for: type(of: self)).infoDictionary?["CFBundleShortVersionString"] as? String

oder in Tests

let version = Bundle(for: <SomeClass>.self).infoDictionary?["CFBundleShortVersionString"] as? String
0
yoAlex5

Swift 3:

let textVersion
 = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
0
Zvonimir Taslak

Swift 3 Version

if let infoPath = Bundle.main.path(forResource: "Info.plist", ofType: nil),
        let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath),
        let infoDate = infoAttr[.creationDate] as? Date
{
    return infoDate
}
return Date()
0
Ryan X