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?

40voto

ziligy Punkte 1397

Swift 5 als UIApplication-Erweiterung

extension UIApplication {
    static var release: String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String? ?? "x.x"
    }
    static var build: String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String? ?? "x"
    }
    static var version: String {
        return "\(release).\(build)"
    }
}

Beispiel Verwendung:

print("release: \(UIApplication.release)")
print("build: \(UIApplication.build)")
print("version: \(UIApplication.version)")

40voto

Iryna Batvina Punkte 1606

Für Swift 4.0

let version = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let build = Bundle.main.infoDictionary!["CFBundleVersion"]!

36voto

Carmen Punkte 6006

Ich habe eine Erweiterung im Bundle gemacht

extension Bundle {

    var appName: String {
        return infoDictionary?["CFBundleName"] as! String
    }

    var bundleId: String {
        return bundleIdentifier!
    }

    var versionNumber: String {
        return infoDictionary?["CFBundleShortVersionString"] as! String 
    }

    var buildNumber: String {
        return infoDictionary?["CFBundleVersion"] as! String
    }

}

und dann verwende es

versionLabel.text = "\(Bundle.main.appName) v \(Bundle.main.versionNumber) (Build \(Bundle.main.buildNumber))"

28voto

Gary W. Longsine Punkte 606

Bundle+Extension.swift (SwiftUI, Swift 5, Xcode 11)

Ich habe Ideen aus ein paar Antworten kombiniert und etwas erweitert:

  • ein SwiftUI-Beispiel
  • Zeigt ein Warnungsdreieck-Emoticon an (anstatt die App zum Absturz zu bringen), wenn der Schlüssel im Info.plist fehlt

import Foundation

extension Bundle {

    public var appVersionShort: String {
        if let result = infoDictionary?["CFBundleShortVersionString"] as? String {
            return result
        } else {
            return ""
        }
    }
    public var appVersionLong: String {
        if let result = infoDictionary?["CFBundleVersion"] as? String {
            return result
        } else {
            return ""
        }
    }
    public var appName: String {
        if let result = infoDictionary?["CFBundleName"] as? String {
            return result
        } else {
            return ""
        }
    }
}

SwiftUI-Beispielverwendung

VStack {

     Text("Version: \(Bundle.main.appVersionShort!) (\(Bundle.main.appVersionLong!))")
                    .font(.subheadline)
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
}

19voto

Sebastian Boldt Punkte 5135

Ich habe eine Erweiterung für UIApplication erstellt.

extension UIApplication {
    static var appVersion: String {
        let versionNumber = Bundle.main.infoDictionary?[IdentifierConstants.InfoPlist.versionNumber] as? String
        let buildNumber = Bundle.main.infoDictionary?[IdentifierConstants.InfoPlist.buildNumber] as? String

        let formattedBuildNumber = buildNumber.map {
            return "(\($0))"
        }

        return [versionNumber,formattedBuildNumber].compactMap { $0 }.joined(separator: " ")
    }
}

enum Constants {
    enum InfoPlist {
        static let versionNumber = "CFBundleShortVersionString"
        static let buildNumber = "CFBundleVersion"
    }
}

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