Es gibt 2 Zahlen!
Die Marketing- Versionsnummer ist für die Kunden als Versionsnummer bezeichnet . Es beginnt mit 1.0 und reicht für größere Updates auf 2.0 , 3.0 , für kleinere Updates auf 1.1 , 1.2 und für Fehlerkorrekturen auf 1.0.1 , 1.0.2 . Diese Nummer orientiert sich an Releases und neuen Funktionen. Es muss nicht bei 9 aufhören, 1.11.23 ist eine vernünftige Versionsnummer.
Die Build-Nummer ist meistens die interne Anzahl der Builds , die bis dahin erstellt wurden. Einige verwenden jedoch andere Nummern wie die Zweigstellennummer des Repositorys oder die Festschreibungsnummer. Diese Nummer sollte eindeutig sein , um die verschiedenen Builds zu unterscheiden, die nur geringfügige inkrementelle Änderungen aufweisen.
So erhalten Sie die Versionsnummer :
Ziel c:
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
Swift <3.0:
let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
Swift 3.0+ (getestet mit 5.0):
let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
So erhalten Sie die Build- Nummer:
Ziel c:
NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Swift <3.0:
let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Swift 3.0+ (getestet bis 5.0):
let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Wenn Sie beide in einem wollen:
Verwenden Sie zuerst die obigen Zeilen und dann die folgende.
Ziel c:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (getestet bis 5.0):
let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"
Anmerkungen:
Die Werte im Hauptpaket sind nicht immer vorhanden. In einer Befehlszeilenanwendung gibt es beispielsweise kein CFBundleShortVersionString
oder CFBundleVersion
. Daher werden die Methoden zurückgegeben nil
und stürzen ab, da im Code ein falscher Downcast ausgeführt wird. In normalen Cocoa iOS- und Mac-Apps sind diese Werte jedoch definiert und werden nicht gelöscht.
Dies wird mit Xcode Version 7.3 (7D175) getestet . Die Build-Nummer wird häufig in Klammern angegeben. Die Build-Nummer ist hexadezimal oder dezimal.
In Xcode können Sie die Build-Nummer automatisch als Dezimalzahl erhöhen, indem Sie Run script
in den Projekteinstellungen Folgendes in die Build-Phase einfügen
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
Verwenden Sie für die hexadezimale Build-Nummer dieses Skript
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber))
buildNumber=$(($buildNumber + 1))
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
Gehen Sie dazu Xcode
wie folgt vor:
Schritt 1
Schritt 2
Schritt 3
Bundle.main.object(forInfoDictionaryKey: "...")
jetzt.Sie müssen nichts an Ihrem Projekt oder Xcode ändern. Hier ist die Swift-Version für beide separat:
Es ist in diesem Repo enthalten, probieren Sie es aus:
https://github.com/goktugyil/EZSwiftExtensions
quelle
Bundle.main.object(forInfoDictionaryKey: "...")
jetzt.Hier der gleiche Code für Swift 3 :
quelle
Bundle.main
hatte eine leereinfoDictionary
für mich; Vielleicht, weil ich es innerhalb eines Frameworks mache, nicht einer ausführbaren Datei oder App?Bundle(for: MyClass.self)
enthält die erwarteten Werte.Programmgesteuerte Anzeige von Version und Build-Nummer - Swift 4.0
quelle
Sie können auch gerne verwenden
Dann können Sie überall verwenden, wenn Sie global deklarieren.
Ausgabe:
quelle
Ich habe eine Erweiterung für Bundle erstellt, damit es einfach zu bedienen ist
quelle