versiones programming playgrounds para latest apple ios swift

programming - versiones swift ios



Obteniendo la versión y la información de construcción con Swift (13)

¿Qué estaba mal con la sintaxis Swift? Esto parece funcionar:

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

Estoy intentando obtener acceso al NSBundle principal para recuperar la información de la versión y la compilación. Lo que quiero decir es que quiero probarlo rápidamente, sé cómo recuperarlo en Objective-C con Build.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; . Sin embargo, no sé por dónde empezar con swift, he intentado escribirlo en la nueva sintaxis sin ningún resultado.


// Devuelve el número de versión de la aplicación

public static var appVersion: String? { return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String }

// Devolver el número de compilación de la aplicación

public static var appBuild: String? { return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String }


Aquí está la manera simple de obtener Build y versión.

Para Swift 4.X

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

Para el objetivo c

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

Déjame saber si hay algún problema. Esto es trabajo para mí.


En swift, lo haría como 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))" } }

Entonces puedes usar el siguiente para obtener todo lo que necesitas:

let version = UIApplication.sharedApplication.applicationVersion() // 1 let build = UIApplication.sharedApplication.applicationBuild() // 80 let both = UIApplication.sharedApplication.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"


Manera AppVersion 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))." } }


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 pueden ser referenciados como variables en el AppDelegate


Para Swift 3, Reemplace NSBundle con Bundle y mainBundle se reemplaza simplemente por main.

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


Para la versión final de uso de Xcode 6

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

Los "?" personaje después de infoDictionary es importante aquí


Swift 3:

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


Versión 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()


[Actualización: Xcode 6.3.1] Probé todo lo anterior y ninguno de estos trabajos en Xcode 6.3.1, pero encontré que esto hace:

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


Versión Swift 3/4

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 here .