Yanıtlar:
Orada 2 Numaraları!
Pazarlama sürüm numarası, sürüm numarası adı verilen müşteriler içindir . 1.0 ile başlar ve 2.0 , 3.0'a yapılan büyük güncellemeler , 1.1 , 1.2'ye yapılan küçük güncellemeler ve 1.0.1 , 1.0.2'ye yapılan hata düzeltmeleri için yükselir . Bu sayı sürümlere ve yeni özelliklere yöneliktir. 9'da durması gerekmez, 1.11.23 makul bir sürüm numarasıdır.
Yapı numarası çoğunlukla inşa dahili numarası o zamana kadar yapılmıştır. Ancak bazıları deponun şube numarası veya taahhüt numarası gibi diğer numaraları kullanır. Bu sayı , yalnızca küçük artımlı değişikliklere sahip farklı yapıları ayırt etmek için benzersiz olmalıdır .
Objective-C:
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
Swift <3.0:
let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
Swift 3.0+ (5.0 ile test edilmiştir):
let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
Objective-C:
NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Swift <3.0:
let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Swift 3.0+ (5.0'a kadar test edilmiştir):
let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Önce yukarıdaki satırları sonra da sonraki satırları kullanın.
Objective-C:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (5.0'a kadar test edildi):
let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"
Ana paketteki değerler her zaman mevcut değildir, örneğin bir komut satırı uygulamasında CFBundleShortVersionString
veya yoktur CFBundleVersion
, bu nedenle yöntemler geri döner nil
ve kodda yanlış bir downcast oluşturduğu için çökecektir. Ancak normal Kakao iOS ve Mac uygulamalarında bu değerler tanımlanır ve silinmez.
Bu, Xcode Sürüm 7.3 (7D175) ile test edilmiştir . Derleme numarası genellikle parantez / parantez içinde yazılır. Derleme numarası onaltılı veya ondalıktır.
In Xcode Otomatik artımlı olarak yazabilir yapı numarasını bir şekilde ondalık sayı halinde aşağıdaki yerleştirerek Run script
proje ayarlarında yapım aşamasından
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
İçin onaltılık yapı numarası Bu komut dosyasını kullanmak
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"
Bunun için Xcode
aşağıdakileri yapın:
Bundle.main.object(forInfoDictionaryKey: "...")
şimdi.
Projenizdeki veya Xcode'unuzdaki hiçbir şeyi değiştirmeniz gerekmez. Her ikisi için ayrı ayrı Swift sürümü:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Bu repoya dahildir, bir göz atın:
Bundle.main.object(forInfoDictionaryKey: "...")
şimdi.
Swift 3 için aynı kod :
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Bundle.main
infoDictionary
benim için boştu ; belki bir yürütülebilir veya uygulama değil, bir çerçeve içinde yaptığım için? Bundle(for: MyClass.self)
beklenen değerleri içerir.
Programlı olarak sürümü ve sürüm numarasını göster - Swift 4.0
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"
let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"
Gibi kullanabilirsiniz
var appVersion: String {
//versionNumber
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"
//buildNumber
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"
return "Version: #\(versionNumber) (#\(buildNumber))"
}
Daha sonra Global olarak beyan ettiğiniz her yerde kullanabilirsiniz.
print(appVersion)
Çıktı:
Version: #1.0 (#1.0.3)
Bundle için bir uzantı yaptım, böylece kullanımı kolay olacak
extension Bundle {
var releaseVersionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildVersionNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}
var applicationName: String {
return infoDictionary?["CFBundleDisplayName"] as? String ?? "ADKATech"
}
var applicationReleaseDate: String {
return infoDictionary?["ApplicationReleaseDate"] as? String ?? Date().description
}
var applicationReleaseNumber: Int {
return infoDictionary?["ApplicationReleaseNumber"] as? Int ?? 0
}
var releaseVersionNumberPretty: String {
return "\(releaseVersionNumber ?? "1.0.0")"
}
var buildVersionNumberPretty: String {
return "\(buildVersionNumber ?? "1")"
}
}