¿Cómo obtengo la versión actual de mi proyecto iOS en código?
151
Me gustaría poder obtener la versión actual de mi proyecto / aplicación iOS como un NSStringobjeto 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 agrego mi versión en el resumen de destino del proyecto.
Puede obtener la versión y los números de compilación de la siguiente manera:
let version =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!Stringlet build =Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)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 sobre UIApplication:
extension UIApplication{staticvar appVersion:String{returnBundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!String}staticvar appBuild:String{returnBundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String}staticvar versionBuild:String{let version = appVersion, build = appBuild
return version == build ?"v\(version)":"v\(version)(\(build))"}}
Podrías usar este [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleVersion"] en lugar de [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *) kCFBundleVersionKey] .The Former parece rimar bien con [[NSBundle mainBfoleVersion "Object_IntringFunding". ]; Así que ahora se ha vuelto fácil de recordar
Durai Amuthan. H
44
@Duraiamuthan recomendaría usar en (NSString *)kCFBundleVersionKeylugar de @"CFBundleVersion". Aunque es más largo de escribir (la función de autocompletar ayudará aquí), ya que es una constante que se verifica en el momento de la compilación.
Ashley Mills
Por cierto, sería más preciso activar esta extensión en NSBundlelugar de UIApplicationesto también permitirá reemplazar las llamadas estáticas con las instancias.
Zapko
@Zapko - Estoy respetuosamente en desacuerdo. Conceptualmente esto encaja UIApplication, ya que la información devuelta es sobre la aplicación. Además, esto solo se aplica al mainpaquete: no tendría sentido hacer de este un método de instancia en cualquier paquete.
Ashley Mills
¿Quiso decir buildcuando dijo appBundle(en la segunda línea de su código)?
user1046037
14
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)")
En Swift, puede obtener la versión del paquete usando:
let info:NSDictionary=NSBundle.mainBundle().infoDictionary!let version:String= info.objectForKey("CFBundleShortVersionString")as!String
versionLabel.text ="Version:"+ version
Para obtener el valor localizado de cualquier clave, debe usar CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
Así que aquí hay una versión Swift para ambos por separado:
let versionNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")as!Stringlet buildNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion")as!String
Está incluido en este repositorio, échale un vistazo:
(NSString *)kCFBundleVersionKey
lugar de@"CFBundleVersion"
. Aunque es más largo de escribir (la función de autocompletar ayudará aquí), ya que es una constante que se verifica en el momento de la compilación.NSBundle
lugar deUIApplication
esto también permitirá reemplazar las llamadas estáticas con las instancias.UIApplication
, ya que la información devuelta es sobre la aplicación. Además, esto solo se aplica almain
paquete: no tendría sentido hacer de este un método de instancia en cualquier paquete.build
cuando dijoappBundle
(en la segunda línea de su código)?Esto es lo que funcionó en Xcode 8, Swift 3:
fuente
En el objetivo C:
1) Para obtener la versión de la aplicación, debe utilizar:
2) Para obtener la versión Build, debe usar:
fuente
En Swift, puede obtener la versión del paquete usando:
fuente
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í:
fuente
Solo por nota
Para obtener el valor localizado de cualquier clave, debe usar
CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
fuente
Así que aquí hay una versión Swift para ambos por separado:
Está incluido en este repositorio, échale un vistazo:
https://github.com/goktugyil/EZSwiftExtensions
fuente