tutorial programar programacion mac lenguaje for español desarrollo aprender apple ios objective-c iphone swift

ios - programar - xcode



¿Cómo obtengo la versión actual de mi proyecto iOS en código? (7)

Me gustaría poder obtener la versión actual de mi proyecto / aplicación iOS como un objeto NSString sin tener que definir una constante en un archivo en alguna parte. No quiero cambiar el valor de mi versión en 2 lugares.

El valor debe actualizarse cuando encuentre mi versión en el resumen del objetivo del proyecto.


Así que aquí hay una versión Swift para ambos por separado:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Está incluido en este repositorio, compruébalo:

https://github.com/goktugyil/EZSwiftExtensions


En Swift, puede obtener la versión de paquete usando:

let info:NSDictionary = NSBundle.mainBundle().infoDictionary! let version:String = info.objectForKey("CFBundleShortVersionString") as! String versionLabel.text = "Version:" + version


En el Objetivo C:

1) Para obtener la versión de la aplicación, debes usar un:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2) Para obtener la versión Build tienes que usar un:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];


Esto es lo que funcionó en Xcode 8, Swift 3:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0" let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0" print("Version: /(gAppVersion)") print("Build: /(gAppBuild)")


Puede obtener la versión y los números de compilación de la siguiente manera:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String

o en Objective-C

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"]; NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];

Tengo los siguientes métodos en una categoría en UIApplication :

extension UIApplication { class func appVersion() -> String { return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String } class func appBuild() -> String { return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String } class func versionBuild() -> String { let version = appVersion(), build = appBuild() return version == build ? "v/(version)" : "v/(version)(/(build))" } }

Gist: https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b

Aquí está el equivalente en Objective-C:

+ (NSString *) appVersion { return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"]; } + (NSString *) build { return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey]; } + (NSString *) versionBuild { NSString * version = [self appVersion]; NSString * build = [self build]; NSString * versionBuild = [NSString stringWithFormat: @"v%@", version]; if (![version isEqualToString: build]) { versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build]; } return versionBuild; }

Gist: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd


Un proyecto mío de código abierto, App Update Tracker , ofrece esta funcionalidad (y más) en forma de métodos de clase:

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

Lo usarías así:

#import "AppUpdateTracker.h" NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]); NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);


Solo por la nota

Para obtener el valor localizado de cualquier clave, debe usar CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)