567 Stimmen

Wie erhalte ich die App-Version und die Build-Nummer mit Swift?

Ich habe eine IOS-App mit einem Azure-Backend und möchte bestimmte Ereignisse protokollieren, wie z.B. Anmeldungen und welche Versionen der App die Benutzer verwenden.

Wie kann ich die Version und Build-Nummer mit Swift zurückgeben?

17voto

Tejas Punkte 1050

Für Swift 3.0 funktioniert NSBundle nicht, der folgende Code funktioniert perfekt.

let versionNumberString =
      Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString")
          as! String

und nur für die Build-Nummer, es ist:

let buildNumberString =
      Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
          as! String

Verwirrenderweise ist 'CFBundleVersion' die Build-Nummer wie sie in Xcode unter Allgemein->Identität eingegeben wurde.

16voto

Hugo F Punkte 640

Xcode 9.4.1 Swift 4.1

Beachten Sie die Verwendung von localizedInfoDictionary, um die richtige Sprachversion des Bundle-Anzeigenamens auszuwählen.

var displayName: String?
var version: String?
var build: String?

override func viewDidLoad() {
    super.viewDidLoad()

    // Display-Namen, Version und Build abrufen

    if let displayName = Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String {
        self.displayName = displayName
    }
    if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
        self.version = version
    }
    if let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
        self.build = build
    }
}

15voto

Crashalot Punkte 31926

Xcode 8, Swift 3:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

Translated to German:

Xcode 8, Swift 3:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

15voto

Senseful Punkte 79049

OP hat nach Versionsnummer und Build-Nummer gefragt. Leider bieten die meisten Antworten nicht beide Optionen. Darüber hinaus fügen andere unnötige Erweiterungsmethoden hinzu. Hier ist eine ziemlich einfache Lösung für das Problem von OP:

// Beispielausgabe: "1.0 (234)"
private func versionAndBuildNumber() -> String {
  let versionNumber = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
  let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
  if let versionNumber = versionNumber, let buildNumber = buildNumber {
    return "\(versionNumber) (\(buildNumber))"
  } else if let versionNumber = versionNumber {
    return versionNumber
  } else if let buildNumber = buildNumber {
    return buildNumber
  } else {
    return ""
  }
}

14voto

maslovsa Punkte 1524

Swift 4, nützliche Erweiterung für Bundle

import Foundation

public extension Bundle {

    public var shortVersion: String {
        if let result = infoDictionary?["CFBundleShortVersionString"] as? String {
            return result
        } else {
            assert(false)
            return ""
        }
    }

    public var buildVersion: String {
        if let result = infoDictionary?["CFBundleVersion"] as? String {
            return result
        } else {
            assert(false)
            return ""
        }
    }

    public var fullVersion: String {
        return "\(shortVersion)(\(buildVersion))"
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X