Bagaimana cara saya mendapatkan kode proyek iOS versi saya saat ini?
151
Saya ingin bisa mendapatkan versi proyek / aplikasi iOS saya saat ini sebagai NSStringobjek tanpa harus menentukan konstanta dalam file di suatu tempat. Saya tidak ingin mengubah nilai versi saya di 2 tempat.
Nilai perlu diperbarui ketika saya menabrak versi saya di ringkasan target proyek.
Anda bisa mendapatkan versi dan membangun nomor sebagai berikut:
let version =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!Stringlet build =Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String
atau di Objective-C
NSString* version =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];NSString* build =[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey];
Saya memiliki metode berikut dalam kategori di UIApplication:
extension UIApplication{staticvar appVersion:String{returnBundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!String}staticvar appBuild:String{returnBundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String}staticvar versionBuild:String{let version = appVersion, build = appBuild
return version == build ?"v\(version)":"v\(version)(\(build))"}}
Anda dapat menggunakan objek [[NSBundle mainBundle] iniUntukInfoDictionaryKey: @ "CFBundleVersion"] alih-alih [[NSBundle mainBundle] objekUntukInfoDictionaryKey: (NSString *) kCFBundleVersionKey] .Pemula tampaknya memiliki rhasi baik dengan kata kunci: ]; jadi Sekarang menjadi mudah untuk diingat
Durai Amuthan. H
4
@Duraiamuthan Saya sarankan menggunakan (NSString *)kCFBundleVersionKeydaripada @"CFBundleVersion". Meskipun lebih lama untuk mengetik (pelengkapan otomatis akan membantu di sini), karena ini adalah konstanta yang diperiksa pada waktu kompilasi.
Ashley Mills
Namun, akan lebih akurat untuk menjadikan ekstensi ini aktif, NSBundlealih-alih UIApplicationini juga akan memungkinkan untuk mengganti panggilan statis dengan panggilan instan.
Zapko
@ Zapko - Dengan hormat saya tidak setuju. Secara konseptual ini cocok dengan UIApplication, karena informasi yang dikembalikan adalah tentang aplikasi. Juga, ini hanya berlaku untuk mainbundel - tidak masuk akal untuk menjadikan ini metode instan pada bundel apa pun.
Ashley Mills
Apakah maksud Anda buildketika Anda mengatakan appBundle(pada baris kedua kode Anda)?
user1046037
14
Inilah yang bekerja pada Xcode 8, Swift 3:
let gAppVersion =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")??"0"let gAppBuild =Bundle.main.object(forInfoDictionaryKey:"CFBundleVersion")??"0"print("Version: \(gAppVersion)")print("Build: \(gAppBuild)")
Di Swift, Anda bisa mendapatkan versi bundel dengan menggunakan:
let info:NSDictionary=NSBundle.mainBundle().infoDictionary!let version:String= info.objectForKey("CFBundleShortVersionString")as!String
versionLabel.text ="Version:"+ version
Untuk mendapatkan nilai lokal dari kunci apa pun yang harus Anda gunakan CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
Jadi inilah versi Swift untuk keduanya secara terpisah:
let versionNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")as!Stringlet buildNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion")as!String
(NSString *)kCFBundleVersionKey
daripada@"CFBundleVersion"
. Meskipun lebih lama untuk mengetik (pelengkapan otomatis akan membantu di sini), karena ini adalah konstanta yang diperiksa pada waktu kompilasi.NSBundle
alih-alihUIApplication
ini juga akan memungkinkan untuk mengganti panggilan statis dengan panggilan instan.UIApplication
, karena informasi yang dikembalikan adalah tentang aplikasi. Juga, ini hanya berlaku untukmain
bundel - tidak masuk akal untuk menjadikan ini metode instan pada bundel apa pun.build
ketika Anda mengatakanappBundle
(pada baris kedua kode Anda)?Inilah yang bekerja pada Xcode 8, Swift 3:
sumber
Dalam Tujuan C:
1) Untuk mendapatkan versi Aplikasi Anda harus menggunakan:
2) Untuk mendapatkan versi Build Anda harus menggunakan:
sumber
Di Swift, Anda bisa mendapatkan versi bundel dengan menggunakan:
sumber
Proyek sumber terbuka milik saya, Pelacak Pembaruan Aplikasi , menawarkan fungsionalitas ini (dan banyak lagi) dalam bentuk metode kelas:
+ (NSString *)getShortVersionString
+ (NSString *)getLongVersionString
Anda akan menggunakannya seperti ini:
sumber
Hanya untuk dicatat
Untuk mendapatkan nilai lokal dari kunci apa pun yang harus Anda gunakan
CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
sumber
Jadi inilah versi Swift untuk keduanya secara terpisah:
Termasuk dalam repo ini, lihat:
https://github.com/goktugyil/EZSwiftExtensions
sumber