Obtener la versión y comstackr información con Swift

Estoy intentando get acceso a NSBundle principal para recuperar información de versión y compilation. La cosa es que quiero probarlo rápido, sé cómo recuperarlo en Objective-C con Build.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; . Sin embargo, no sé dónde comenzar con rapidez, he intentado escribirlo en la nueva syntax sin ningún resultado. ¡Gracias por cualquier ayuda!

¿Qué sucedió con la syntax Swift? Esto parece funcionar:

 if let text = Bundle.main.infoDictionary?["CFBundleVersion"] as? String { print(text) } 

Versión Swift 3

 func version() -> String { let dictionary = Bundle.main.infoDictionary! let version = dictionary["CFBundleShortVersionString"] as! String let build = dictionary["CFBundleVersion"] as! String return "\(version) build \(build)" } 

Versión Swift 2.x

 func version() -> String { let dictionary = NSBundle.mainBundle().infoDictionary! let version = dictionary["CFBundleShortVersionString"] as String let build = dictionary["CFBundleVersion"] as String return "\(version) build \(build)" } 

como se ve aqui

Para la versión final del uso de Xcode 6

 NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String 

Los "?" carácter después de infoDictionary es importante aquí

AppVersion Swifty para AppName , AppVersion y BuildNumber

 if let dict = NSBundle.mainBundle().infoDictionary { if let version = dict["CFBundleShortVersionString"] as? String, let bundleVersion = dict["CFBundleVersion"] as? String, let appName = dict["CFBundleName"] as? String { return "You're using \(appName) v\(version) (Build \(bundleVersion))." } } 

De manera rápida, lo haría como una extensión para UIApplication, así:

 extension UIApplication { func applicationVersion() -> String { return NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String } func applicationBuild() -> String { return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as! String } func versionBuild() -> String { let version = self.applicationVersion() let build = self.applicationBuild() return "v\(version)(\(build))" } } 

Luego, puede usar los siguientes para get todo lo que necesita:

 let version = UIApplication.shanetworkingApplication.applicationVersion() // 1 let build = UIApplication.shanetworkingApplication.applicationBuild() // 80 let both = UIApplication.shanetworkingApplication.versionBuild() // 1(80) 

Este código funciona para Swift 3, Xcode 8:

 let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0" let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0" 

Otra opción es definir en la AppDelegate las variables:

 var applicationVersion:String { return NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String } var applicationBuild:String { return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as! String } var versionBuild:String { let version = self.applicationVersion let build = self.applicationBuild return "version:\(version) build:(\(build))" } 

que se puede hacer reference como variables en el AppDelegate

Para Swift 3, reemplace NSBundle con package y mainBundle se reemplaza simplemente por principal.

 let AppVersion = Bundle.main.infoDictionary!["CFBundleVersion"] as! String 

[Actualización: Xcode 6.3.1] Probé todo lo anterior y ninguno de estos funciona en Xcode 6.3.1 pero descubrí que esto sí lo hace:

 (NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String)! 

Swift 3:

 let textVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String 

Versión de SWIFT 3

 if let infoPath = Bundle.main.path(forResource: "Info.plist", ofType: nil), let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath), let infoDate = infoAttr[.creationDate] as? Date { return infoDate } return Date() 

Aquí hay una manera simple de get Build y la versión.

Para Swift 2.3

  let dictionary = NSBundle.mainBundle().infoDictionary! let version = dictionary["CFBundleShortVersionString"] as String let build = dictionary["CFBundleVersion"] as String print "Version : \(version), Build \(build)" 

Para el objective C

 NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; NSString * currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 

Déjame saber si hay algún problema. Esto está funcionando para mí.