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 .