首页 文章

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

提问于
浏览
247

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

对于我发布的每个版本,我宁愿不必手动执行此操作...

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

14 回答

  • 17

    您可以尝试使用字典: -

    NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
    
    NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
    NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
    
  • 4

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

  • 219

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

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

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

  • 42

    基于Brad Larson的答案,如果您在信息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];
    }
    

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

  • 31

    Swift版本分别为:

    斯威夫特3

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

    斯威夫特2

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

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

    https://github.com/goktugyil/EZSwiftExtensions

  • 30

    这就是我在申请中所做的

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

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

  • 50

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

  • 16

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

    • 获取应用版本:
    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
    • 要获得Build版本:
    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
  • 1
    // Syncs with App Store and Xcode Project Settings Input
    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  • 0

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

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

    或者,对于X.Y:

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

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

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

    您可以使用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)"
    }
    
  • 4

    如果你需要 version and build numcombination ,这里有一个使用 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)"
    

    as! String 添加到 appVersionbuildNum 行的末尾,以仅将该部分作为 String 对象 . 如果你正在寻找完整的 versionInfo ,那就不需要了 .

    我希望这有帮助!

  • 0

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

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

  • 7

    你可以试试这个方法:

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

相关问题