Baca versi dari Info.plist


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"];

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)")
}

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);

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];
    }

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.