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?
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?
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.
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
}
}
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"
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 ""
}
}
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 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.