Ada 2 Angka!
Nomor rilis pemasaran untuk pelanggan, disebut nomor versi . Dimulai dengan 1.0 dan naik untuk pembaruan besar ke 2.0 , 3.0 , untuk pembaruan kecil ke 1.1 , 1.2 dan untuk perbaikan bug ke 1.0.1 , 1.0.2 . Nomor ini berorientasi pada rilis dan fitur baru. Itu tidak harus berhenti di 9, 1.11.23 adalah nomor versi yang wajar.
Nomor build sebagian besar adalah jumlah internal build yang telah dibuat hingga saat itu. Tetapi beberapa menggunakan nomor lain seperti nomor cabang repositori atau nomor komitnya. Nomor ini seharusnya unik untuk membedakan build yang berbeda, yang hanya memiliki sedikit perubahan tambahan.
Untuk mendapatkan nomor versi :
Objective-C:
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
Swift <3.0:
let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
Swift 3.0+ (diuji dengan 5.0):
let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
Untuk mendapatkan nomor build :
Objective-C:
NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Swift <3.0:
let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Swift 3.0+ (diuji hingga 5.0):
let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
jika kamu mau keduanya dalam satu:
Pertama gunakan baris di atas dan kemudian yang berikutnya.
Objective-C:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (diuji hingga 5.0):
let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"
Catatan:
Nilai-nilai dalam bundel utama tidak selalu ada, misalnya dalam aplikasi baris perintah tidak ada CFBundleShortVersionString
atau CFBundleVersion
, sehingga metode akan mengembalikannil
dan akan macet karena dalam kode itu membuat downcast yang salah. Namun di aplikasi Cocoa iOS dan Mac normal, nilai-nilai ini ditentukan dan tidak akan dihapus.
Ini diuji dengan Xcode Versi 7.3 (7D175) . Nomor build sering kali ditulis dalam tanda kurung / kurung. Nomor build dalam heksadesimal atau desimal.
Di Xcode Anda dapat secara otomatis menambah nomor build sebagai angka desimal dengan menempatkan yang berikut ini dalam Run script
fase build di pengaturan proyek
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
Untuk nomor build heksadesimal, gunakan skrip ini
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"
Untuk Xcode
melakukan hal berikut:
Langkah 1
Langkah 2
LANGKAH 3
Bundle.main.object(forInfoDictionaryKey: "...")
sekarang.Anda tidak perlu mengubah apa pun dalam proyek atau Xcode Anda. Berikut versi Swift untuk keduanya secara terpisah:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Ini termasuk dalam repo ini, periksa:
https://github.com/goktugyil/EZSwiftExtensions
sumber
Bundle.main.object(forInfoDictionaryKey: "...")
sekarang.Berikut kode yang sama untuk Swift 3 :
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
sumber
Bundle.main
memiliki yang kosonginfoDictionary
untukku; mungkin karena saya melakukannya dari dalam kerangka kerja, bukan yang dapat dieksekusi atau aplikasi?Bundle(for: MyClass.self)
berisi nilai yang diharapkan.Menampilkan versi dan nomor versi secara terprogram - 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) )"
sumber
Anda juga bisa menggunakan suka
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))" }
Kemudian Anda dapat menggunakan di mana saja saat Anda mendeklarasikan Secara Global.
print(appVersion)
Keluaran:
Version: #1.0 (#1.0.3)
sumber
Saya membuat ekstensi untuk Bundle agar mudah digunakan
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")" } }
sumber