How do I get the current version of my iOS project in code?

后端 未结 8 1322
挽巷
挽巷 2020-12-12 10:23

I would like to be able to get the current version of my iOS project/app as an NSString object without having to define a constant in a file somewhere. I don\'t

相关标签:
8条回答
  • 2020-12-12 10:48

    [Swift version: 5.2]

    All iOS apps must store an app version number in their Info.plist file, but there’s no build-in way to get that as a string you can use in your code.

    I have created one small extension to UIApplication that reads the Info.plist file and returns a version number automatically.

    Here’s the code:

    extension UIApplication {
        static var appVersion: String? {
            return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
        }
    }
    

    Inside Your Controller

    @IBOutlet weak var tv_version: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
       
        //Display Version
        setUpCurrentVersion()
    }
    
    
    func setUpCurrentVersion(){
        tv_version.text = "v" + UIApplication.appVersion!
    }
    
    0 讨论(0)
  • 2020-12-12 10:50

    Here's what worked on Xcode 8, Swift 3:

    let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
    let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"
    
    print("Version: \(gAppVersion)")
    print("Build: \(gAppBuild)")
    
    0 讨论(0)
  • 2020-12-12 10:53

    An open source project of mine, App Update Tracker, offers this functionality (and more) in the form of class methods:

    • + (NSString *)getShortVersionString
    • + (NSString *)getLongVersionString

    You would use it like so:

    #import "AppUpdateTracker.h"
    
    NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
    NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
    
    0 讨论(0)
  • 2020-12-12 10:57

    Just for note

    To obtain localized value of any key you should use CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)

    0 讨论(0)
  • 2020-12-12 11:00

    In Objective C:

    1)For getting App version you have to use a:

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

    2)For getting Build version you have to use a:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
    
    0 讨论(0)
  • 2020-12-12 11:09

    You can get the version and build numbers as follows:

    let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
    

    or in Objective-C

    NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
    NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
    

    I have the following methods in a category on UIApplication:

    extension UIApplication {
    
        static var appVersion: String {
            return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
        }
    
        static var appBuild: String {
            return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
        }
    
        static var versionBuild: String {
            let version = appVersion, build = appBuild            
            return version == build ? "v\(version)" : "v\(version)(\(build))"
        }
    }
    

    Gist: https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b


    Here's the equivalent in Objective-C:

    + (NSString *) appVersion
    {
        return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];    
    }
    
    + (NSString *) build
    {
        return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
    }
    
    + (NSString *) versionBuild
    {
        NSString * version = [self appVersion];
        NSString * build = [self build];
    
        NSString * versionBuild = [NSString stringWithFormat: @"v%@", version];
    
        if (![version isEqualToString: build]) {
            versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build];
        }
    
        return versionBuild;
    }
    

    Gist: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd

    0 讨论(0)
提交回复
热议问题