从Info.plist读取版本


Answers:


201

您可以将Info.plist作为字典阅读,

[[NSBundle mainBundle] infoDictionary]

这样一来,您就可以轻松获取CFBundleVersion关键版本。

最后,您可以使用

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

完善。这比我使用的所有CF *函数要简单得多……我确信必须有一种快速的方法来获取NSDictionary。

16
对于版本号,这无关紧要,但是对于其他键,您可能要使用objectForInfoDictionaryKey:它,因为它会返回本地化的值(如果可用):[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony 2011年

20
请注意,在Xcode4中,如果您查看目标的摘要面板,则会看到“版本和构建”字段。CFBundleVersion已重新定位为Build和Version为CFBundleShortVersionString
记忆

5
这将同时获取版本和内部版本号,并将其格式化: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks 2013年

使用CFBundleShortVersionString作为objectForKey方法的键。
ayalcinkaya

11

对于Swift用户:

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

对于Swift3用户:

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

5

我知道自寻求和回答以来已经过去了一段时间。

从iOS8开始,接受的答案可能无效。

这是现在的新方法:

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

6
您是否有链接为何如此?
伊恩·沃伯顿

4

现在,在iOS 8中,两个字段都是必需的。较早时,它不带CFBundleShortVersionString。但是现在这是必填的plist字段,用于在应用商店中提交任何应用。并且kCFBundleVersionKey会比较上传的每个新版本(必须按增量顺序)。专门用于TestFlight构建。我是这样的

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

谢谢.. version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@“ CFBundleShortVersionString”]; 为我工作
swiftBoy 2015年

3

斯威夫特3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.