How do I get the App version and build number using Swift?

前端 未结 30 1044
暖寄归人
暖寄归人 2020-12-22 15:21

I have an IOS app with an Azure back-end, and would like to log certain events, like logins and which versions of the app users are running.

How can I return the ver

30条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-22 15:49

    Updated for Swift 3.0

    The NS-prefixes are now gone in Swift 3.0 and several properties/methods have changed names to be more Swifty. Here's what this looks like now:

    extension Bundle {
        var releaseVersionNumber: String? {
            return infoDictionary?["CFBundleShortVersionString"] as? String
        }
        var buildVersionNumber: String? {
            return infoDictionary?["CFBundleVersion"] as? String
        }
    }
    
    Bundle.main.releaseVersionNumber
    Bundle.main.buildVersionNumber
    

    Old Updated Answer

    I've been working with Frameworks a lot since my original answer, so I wanted to update my solution to something that is both simpler and much more useful in a multi-bundle environment:

    extension NSBundle {
    
        var releaseVersionNumber: String? {
            return self.infoDictionary?["CFBundleShortVersionString"] as? String
        }
    
        var buildVersionNumber: String? {
            return self.infoDictionary?["CFBundleVersion"] as? String
        }
    
    }
    

    Now this extension will be useful in apps to identify both the main bundle and any other included bundles (such as a shared framework for extension programming or third frameworks like AFNetworking), like so:

    NSBundle.mainBundle().releaseVersionNumber
    NSBundle.mainBundle().buildVersionNumber
    
    // or...
    
    NSBundle(URL: someURL)?.releaseVersionNumber
    NSBundle(URL: someURL)?.buildVersionNumber
    

    Original Answer

    I wanted to improve on some of the answers already posted. I wrote a class extension that can be added to your tool chain to handle this in a more logical fashion.

    extension NSBundle {
    
    class var applicationVersionNumber: String {
        if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"]
    

    as? String { return version } return "Version Number Not Available" }

    class var applicationBuildNumber: String {
        if let build = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String {
            return build
        }
        return "Build Number Not Available"
    }
    
    }
    

    So now you can access this easily by:

    let versionNumber = NSBundle.applicationVersionNumber
    

提交回复
热议问题