我的iphone应用程序如何检测自己的版本号?

时间:2009-01-19 18:32:22

标签: iphone ios version

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

我不想在我发布的每个版本中手动执行此操作...

在Objective-C中是否有办法找出我的应用程序的版本?

16 个答案:

答案 0 :(得分:219)

As I describe here,我使用脚本用我当前的Subversion版本号重写头文件。该修订号存储在kRevisionNumber常量中。然后,我可以使用类似于以下内容的方式访问版本和修订号:

[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]

将创建格式为“Version 1.0(51)”的字符串。

答案 1 :(得分:146)

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

现在手动加载次要版本可能会很麻烦,因此使用源存储库修订号技巧是理想的。如果您没有将其绑定(因为我没有),上面的代码段可能很有用。它还会拉出应用程序的显示名称。

答案 2 :(得分:53)

单独的Swift版本:

Swift 3

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

Swift 2

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

它包含在此回购中,请查看:

https://github.com/goktugyil/EZSwiftExtensions

答案 3 :(得分:42)

这就是我在我的申请中所做的

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

希望这个简单的答案能帮助某人......

答案 4 :(得分:31)

您可以在plist.info中指定CFBundleShortVersionString字符串,然后使用provided API以编程方式阅读。

答案 5 :(得分:30)

有两件事 - 构建版本和应用版本。

  1. 获取应用版本:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. 获取Build版本:

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

答案 6 :(得分:17)

// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

答案 7 :(得分:16)

X.Y.Z 格式获取版本字符串的简洁方法是:

[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]

或者,只是 X.Y:

[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]

这两个片段都会返回您要分配给标签对象的文本属性的字符串,例如

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];

答案 8 :(得分:7)

您可以尝试使用字典: -

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]

答案 9 :(得分:4)

阅读应用的info.plist文件,获取密钥CFBundleShortVersionString的值。阅读info.plist会给你一个NSDictionary对象

答案 10 :(得分:4)

您可以使用infoDictionary从您应用的info.plist获取版本详细信息。此代码适用于swift 3.只需调用此方法并在任何首选UI元素中显示该版本。

Swift-3  

func getVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as! String
    let build = dictionary["CFBundleVersion"] as! String
    return "v\(version).\(build)"
}

答案 11 :(得分:1)

如果您需要版本内置数字组合,这里使用 Swift 3 < /强>:

buildNum

String添加到versionInfo或{{1}}行的末尾,以仅将该部分作为{{1}}对象获取。如果你正在寻找完整的{{1}},那就不需要了。

我希望这有帮助!

答案 12 :(得分:0)

使用修订控制系统处理这是一件好事。这样,当您收到用户的错误报告时,您可以查看该修订版的代码并(希望)重现运行与用户完全相同的代码的错误。

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

答案 13 :(得分:0)

您可以尝试以下方法:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

答案 14 :(得分:0)

func getAppVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let versionValue = dictionary["CFBundleShortVersionString"] ?? "0"
    let buildValue = dictionary["CFBundleVersion"] ?? "0"
    return "\(versionValue) (build \(buildValue))"
}

基于@rajat chauhan的答案,没有强制转换为String

答案 15 :(得分:0)

快捷键5:

有两件事-应用程序版本和构建版本

  • 获取应用版本:

     if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
          // present appVersion
    }
    
  • 要获取内部版本:

     if let buildVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
          // present buildVersion
     }
    

非常感谢@Brad Larson♦