var displayName: String?
var version: String?
var build: String?
override func viewDidLoad() {
super.viewDidLoad()
// Get display name, version and build
if let displayName = Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String {
self.displayName = displayName
}
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
self.version = version
}
if let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
self.build = build
}
}
-1
我的答案(截至2015年8月),鉴于Swift不断发展:
let version = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as! String
2
看过文档后,我相信以下内容更清晰:
let version =
NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")
as? String
Source:"Use of this method is preferred over other access methods because it returns the localized value of a key when one is available."
2
对于Swift 1.2,它是:
let version = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
let build = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as! String
1
EDIT
针对Swift 4.2进行了更新
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as? String
let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]
End Edit
只需使用与Objective-C相同的逻辑,但需要进行一些小的更改
//First get the nsObject by defining as an optional anyObject
let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary["CFBundleShortVersionString"]
//Then just cast the object as a String, but be careful, you may want to double check for nil
let version = nsObject as String
我希望这能够帮到你 .
大卫
204
我知道这已经得到了回答,但我个人认为这有点清洁:
Swift 3.0:
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
self.labelVersion.text = version
}
Swift <2.3
if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String {
self.labelVersion.text = version
}
class func getVersion() -> String {
guard let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
return "no version info"
}
return version
}
For older versions :
class func getVersion() -> String {
if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String {
return version
}
return "no version info"
}
因此,如果您想设置标签文本或想要在其他地方使用;
self.labelVersion.text = getVersion()
4
我在Bundle上做了一个扩展
extension Bundle {
var appName: String {
return infoDictionary?["CFBundleName"] as! String
}
var bundleId: String {
return bundleIdentifier!
}
var versionNumber: String {
return infoDictionary?["CFBundleShortVersionString"] as! String
}
var buildNumber: String {
return infoDictionary?["CFBundleVersion"] as! String
}
}
然后使用它
versionLabel.text = "\(Bundle.main.appName) v \(Bundle.main.versionNumber) (Build \(Bundle.main.buildNumber))"
3
对于 Swift 4.0
let version = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let build = Bundle.main.infoDictionary!["CFBundleVersion"]!
1
对于Swift 3.0,NSBundle不起作用,以下代码完美运行 .
let versionNumberString =
Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString")
as! String
而对于构建号,它是:
let buildNumberString =
Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
as! String
let appVer: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]
5
Swift 4, useful Extension for Bundle
import Foundation
public extension Bundle {
public var shortVersion: String {
if let result = infoDictionary?["CFBundleShortVersionString"] as? String {
return result
} else {
assert(false)
return ""
}
}
public var buildVersion: String {
if let result = infoDictionary?["CFBundleVersion"] as? String {
return result
} else {
assert(false)
return ""
}
}
public var fullVersion: String {
return "\(shortVersion)(\(buildVersion))"
}
}
10
extension UIApplication {
static var appVersion: String {
if let appVersion = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
return "\(appVersion)"
} else {
return ""
}
}
static var build: String {
if let buildVersion = NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) {
return "\(buildVersion)"
} else {
return ""
}
}
static var versionBuild: String {
let version = UIApplication.appVersion
let build = UIApplication.build
var versionAndBuild = "v\(version)"
if version != build {
versionAndBuild = "v\(version)(\(build))"
}
return versionAndBuild
}
}
import SwifterSwift
let buildNumber = SwifterSwift.appBuild
let version = SwifterSwift.appVersion
25
Bundle Extensions.swift
import Foundation
extension Bundle {
var versionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}
var bundleName: String? {
return infoDictionary?["CFBundleName"] as? String
}
}
用法:
someLabel.text = Bundle.main.versionNumber
55
对于 Swift 2.0
//First get the nsObject by defining as an optional anyObject
let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]
let version = nsObject as! String
22 回答
Xcode 9.4.1 Swift 4.1
请注意使用localizedInfoDictionary来获取捆绑显示名称的正确语言版本 .
我的答案(截至2015年8月),鉴于Swift不断发展:
看过文档后,我相信以下内容更清晰:
Source:"Use of this method is preferred over other access methods because it returns the localized value of a key when one is available."
对于Swift 1.2,它是:
EDIT
针对Swift 4.2进行了更新
EDIT
正如@azdev在Xcode的新版本中所指出的那样,你会在尝试我之前的解决方案时遇到编译错误,解决这个问题只需按照建议进行编辑即可使用!来解开捆绑字典!
End Edit
只需使用与Objective-C相同的逻辑,但需要进行一些小的更改
我希望这能够帮到你 .
大卫
我知道这已经得到了回答,但我个人认为这有点清洁:
Swift 3.0:
Swift <2.3
这样,if let版本负责条件处理(在我的情况下设置标签文本),如果infoDictionary或CFBundleShortVersionString为nil,则可选的展开将导致代码被跳过 .
Updated for Swift 3.0
NS
-prefix现在已经在Swift 3.0中消失了,并且一些属性/方法已将名称更改为更加Swifty . 这是现在的样子:Old Updated Answer
var releaseVersionNumber:String? {
返回self.infoDictionary?[“CFBundleShortVersionString”]为?串
}
var buildVersionNumber:String? {
返回self.infoDictionary?[“CFBundleVersion”]为?串
}
}
现在,这个扩展将在应用程序中用于识别主包和任何其他包含的包(例如扩展编程的共享框架或AFNetworking等第三个框架),如下所示:NSBundle.mainBundle() . releaseVersionNumber
NSBundle.mainBundle() . buildVersionNumber
// 要么...
NSBundle(URL:someURL)?. releaseVersionNumber
NSBundle(URL:someURL)? . buildVersionNumber
Original Answer
class var applicationVersionNumber:String {
如果让版本= NSBundle.mainBundle() . infoDictionary?[“CFBundleShortVersionString”]
如? String 返回“版本号不可用”} class var applicationBuildNumber:String {
如果让build = NSBundle.mainBundle() . infoDictionary?[“CFBundleVersion”]为?字符串{
返回构建
}
返回“内部版本号不可用”
}
}
所以现在您可以通过以下方式轻松访问:let versionNumber = NSBundle.applicationVersionNumber
我也知道这已经得到了解答,但我结束了以前的答案:
(*)已更新扩展程序
用法:
@Deprecated:旧答案
Swift 3.1 :
For older versions :
因此,如果您想设置标签文本或想要在其他地方使用;
我在Bundle上做了一个扩展
然后使用它
对于 Swift 4.0
对于Swift 3.0,NSBundle不起作用,以下代码完美运行 .
而对于构建号,它是:
令人困惑'CFBundleVersion'是在General-> Identity上的Xcode中输入的 build 数字 .
Xcode 8, Swift 3:
Swift 3:
版本号
内部编号
Swift 4
Swift old syntax
Swift 4, useful Extension for Bundle
注意:如果你没有设置app版本或版本,你应该使用if here,如果你试图使用会导致崩溃!打开包装 .
这是Swift 3.2的更新版本:
SWIFT 4
//首先通过定义为可选的AnyObject来获取nsObject
//然后将对象强制转换为String,但要小心,您可能需要仔细检查nil
对于任何感兴趣的人来说,有一个很好的,整洁的库叫做
SwifterSwift
,可以在github找到,并且每个版本的swift都有完整的文档(参见swifterswift.com) .使用这个库,阅读应用程序版本和内部版本号就像这样简单:
Bundle Extensions.swift
用法:
对于 Swift 2.0