Baca versi dari Info.plist

91

Saya ingin membaca info versi bundel dari Info.plist ke dalam kode saya, lebih disukai sebagai string. Bagaimana saya bisa melakukan ini?

John Smith
sumber

Jawaban:

202

Anda dapat membaca Info.plist Anda sebagai kamus dengan

[[NSBundle mainBundle] infoDictionary]

Dan Anda bisa dengan mudah mendapatkan versi CFBundleVersionkunci dengan cara itu.

Terakhir, Anda bisa mendapatkan versinya dengan

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
gcamp
sumber
Sempurna. Itu jauh lebih sederhana daripada semua lini fungsi CF * yang saya gunakan ... Saya yakin pasti ada cara cepat untuk mendapatkan NSDictionary.
Rebus
16
Untuk nomor versi, ini tidak masalah, tetapi untuk kunci lain Anda mungkin ingin menggunakan objectForInfoDictionaryKey:sebagai gantinya, karena mengembalikan nilai yang dilokalkan jika tersedia:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony
20
Perhatikan di Xcode4 jika Anda melihat panel ringkasan target, Anda akan melihat bidang Versi & Bangun. CFBundleVersiontelah diubah fungsinya menjadi Build dan Version CFBundleShortVersionString.
memmons
5
Ini akan mengambil versi & nomor build, dan memformatnya bersama-sama: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks
menggunakan CFBundleShortVersionString sebagai kunci untuk metode objectForKey.
ayalcinkaya
11

untuk pengguna Swift:

if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
    print("version is : \(version)")
}

untuk pengguna Swift3:

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
    print("version is : \(version)")
}
ayalcinkaya
sumber
5

Saya tahu bahwa beberapa waktu telah berlalu sejak pencarian dan jawabannya.

Sejak iOS8, jawaban yang diterima mungkin tidak berfungsi.

Ini adalah cara baru untuk melakukannya sekarang:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
Michael Kessler
sumber
6
Apakah Anda memiliki tautan mengapa demikian?
Ian Warburton
4

Sekarang di iOS 8, kedua bidang tersebut diperlukan. Sebelumnya, ini berfungsi tanpa ekstensi CFBundleShortVersionString. Tapi sekarang ini adalah bidang plist wajib untuk mengirimkan aplikasi apa pun di toko aplikasi. Dan kCFBundleVersionKeydibandingkan untuk mengupload setiap build baru, yang harus dalam urutan tambahan. Khusus untuk build TestFlight. Saya melakukannya dengan cara ini,

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }
karim
sumber
Terima kasih .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; bekerja untuk saya
swiftBoy
3

Cepat 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Nitin Nain
sumber