从 Info.plist 读取版本

Posted

技术标签:

【中文标题】从 Info.plist 读取版本【英文标题】:Read version from Info.plist 【发布时间】:2010-10-30 14:25:12 【问题描述】:

我想将 Info.plist 中的包版本信息读入我的代码,最好是作为字符串。我该怎么做?

【问题讨论】:

【参考方案1】:

你可以把你的 Info.plist 当作字典来阅读

[[NSBundle mainBundle] infoDictionary]

您可以通过这种方式轻松地通过CFBundleVersion 键获取版本。

最后,你可以得到版本

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

【讨论】:

完美。这比我使用的所有 CF* 函数行要简单得多......我确信一定有一种快速的方法来获取 NSDictionary。 对于版本号,这无关紧要,但对于其他键,您可能希望使用objectForInfoDictionaryKey:,因为如果可用,它会返回本地化值:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"] 请注意,在 Xcode4 中,如果您查看目标的摘要面板,您将看到版本和构建字段。 CFBundleVersion 已改用于 Build 版本,版本为 CFBundleShortVersionString 这将获取版本和内部版本号,并将它们格式化在一起:NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build]; 使用 CFBundleShortVersionString 作为 objectForKey 方法的键。【参考方案2】:

对于 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)")

【讨论】:

【参考方案3】:

我知道距离任务和答案已经过去了一段时间。

由于 iOS8,接受的答案可能不起作用。

这是现在的新方法:

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

【讨论】:

你有链接说明为什么会这样吗?【参考方案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"]; 为我工作【参考方案5】:

斯威夫特 3:

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

【讨论】:

以上是关于从 Info.plist 读取版本的主要内容,如果未能解决你的问题,请参考以下文章

从 Info.plist 读取版本

从 Xcode 中的配置文件设置 UIPrerenderedIcon

是否可以在 iOS 中读取已安装应用的 info.plist?

从 iOS 的 UITests 中读取 Info.plist?

iTunes 连接:NSMicrophoneUsageDescription 键丢失但没有麦克风使用

如何在 react-native iOS 应用程序中运行时读取 Info.Plist?