Search code examples
iosobjective-ciphoneswift

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


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 want to change my version value in 2 places.

The value needs to be updated when I bump my version in the Project target summary.


Solution

  • 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