我正在写一个iPhone应用程序。它已经发布,但我想添加一个功能,其版本号显示。

我不希望对我发布的每个版本都手动执行此操作……

objective-C中有办法找出我的应用的版本吗?


当前回答

如果你需要version和build num的组合,这里有一个使用Swift 3的简单方法:

let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]!
let versionInfo = "\(appVersion) (build \(buildNum))"
// versionInfo is now something like "2.3.0 (build 17)"

加一个a !String到appVersion或buildNum行的末尾,以仅获取该部分作为String对象。如果你想要完整的versionInfo,就不需要这样做了。

我希望这能有所帮助!

其他回答

您可以在plist.info中指定CFBundleShortVersionString字符串,并使用提供的API以编程方式读取该字符串。

如果你需要version和build num的组合,这里有一个使用Swift 3的简单方法:

let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]!
let versionInfo = "\(appVersion) (build \(buildNum))"
// versionInfo is now something like "2.3.0 (build 17)"

加一个a !String到appVersion或buildNum行的末尾,以仅获取该部分作为String对象。如果你想要完整的versionInfo,就不需要这样做了。

我希望这能有所帮助!

这就是我在申请中所做的

NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

希望这个简单的答案能帮助到一些人……

根据Brad Larson的回答,如果你在info plist中存储了主版本和次版本信息(就像我在一个特定的项目中所做的那样),这对我来说很有效:

- (NSString *)appNameAndVersionNumberDisplayString {
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];

    return [NSString stringWithFormat:@"%@, Version %@ (%@)", 
                appDisplayName, majorVersion, minorVersion];
}

现在手动更新小版本可能会很痛苦,因此使用源存储库修订号技巧是理想的。如果您还没有绑定它(就像我没有),上面的代码段可能会很有用。它还会提取应用程序的显示名称。

对于版本控制系统来说,这是一件很好的事情。这样,当您从用户那里得到错误报告时,您可以检查代码的修订,并(希望)在运行与用户完全相同的代码时重现错误。

其思想是,每次构建时,您都将运行一个脚本,该脚本获取代码的当前修订号,并更新项目中的文件(通常使用某种形式的令牌替换)。然后,您可以编写一个错误处理例程,在错误输出中始终包含修订号,或者您可以在“About”页面上显示它。