Info.plist'ten sürümü okuyun


Yanıtlar:


202

Info.plistinizi bir sözlük olarak okuyabilirsiniz.

[[NSBundle mainBundle] infoDictionary]

Ve CFBundleVersionbu şekilde anahtardaki sürümü kolayca edinebilirsiniz .

Son olarak, sürümü ile alabilirsiniz.

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];

Mükemmel. Bu, kullandığım tüm CF * işlevlerinden çok daha basit ... NSDictionary almanın hızlı bir yolu olması gerektiğinden emindim.
Güveç

16
Sürüm numarası için bu önemli değil, ancak diğer anahtarlar için kullanmak isteyebilirsiniz objectForInfoDictionaryKey:, çünkü mevcutsa yerelleştirilmiş değeri döndürür:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony

20
Hedefin özet paneline bakarsanız, Sürüm ve Yapı alanlarını göreceksiniz Xcode4'e dikkat edin. CFBundleVersionBuild ve Version is olarak yeniden tasarlandı CFBundleShortVersionString.
memmons

5
Bu, hem sürüm hem de yapı numarasını getirecek ve bunları birlikte biçimlendirecektir: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks

objectForKey yöntemi için anahtar olarak CFBundleShortVersionString kullanın.
ayalcinkaya

11

Swift kullanıcıları için:

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

Swift3 kullanıcıları için:

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

5

Arayıştan ve yanıttan bu yana biraz zaman geçtiğini biliyorum.

İOS8'den beri kabul edilen cevap işe yaramayabilir.

Bunu şimdi yapmanın yeni yolu şudur:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);

6
Bunun neden böyle olduğuna dair bir bağlantınız var mı?
Ian Warburton

4

Şimdi iOS 8'de her iki alan da gereklidir. Daha önce CFBundleShortVersionString. Ancak artık uygulama mağazasında herhangi bir uygulamayı göndermek için gerekli bir plist alanıdır. Ve kCFBundleVersionKeyartımlı sırada olması gereken her yeni yapıyı yüklemek için karşılaştırılır. Özellikle TestFlight derlemeleri için. Ben bu şekilde yaparım

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }

Teşekkürler .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; benim için çalıştı
swiftBoy

3

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.