Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 495 Vote(s) - 3.47 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How do I get the current version of my iOS project in code?

#1
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.
Reply

#2
**[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!
}

Reply

#3
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:**

---

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:**

Reply

#4
**Just for note**

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

#5
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)")
Reply

#6
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"];

Reply

#7
So heres a Swift version for both of these separately:


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

Its included in this repo, check it out:

[To see links please register here]

Reply

#8
An open source project of mine, [App Update Tracker][1], 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]);


[1]:

[To see links please register here]

Reply

#9
In Swift, you can get bundle version by using:


let info:NSDictionary = NSBundle.mainBundle().infoDictionary!

let version:String = info.objectForKey("CFBundleShortVersionString") as! String

versionLabel.text = "Version:" + version

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through