Actualizado para Swift 3.0
Los NS
prefijos ya no están en Swift 3.0 y varias propiedades / métodos han cambiado de nombre para ser más Swifty. Así es como se ve ahora:
extension Bundle {
var releaseVersionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildVersionNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}
}
Bundle.main.releaseVersionNumber
Bundle.main.buildVersionNumber
Antigua respuesta actualizada
He trabajado mucho con Frameworks desde mi respuesta original, por lo que quería actualizar mi solución a algo que sea más simple y mucho más útil en un entorno de paquetes múltiples:
extension NSBundle {
var releaseVersionNumber: String? {
return self.infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildVersionNumber: String? {
return self.infoDictionary?["CFBundleVersion"] as? String
}
}
Ahora esta extensión será útil en aplicaciones para identificar tanto el paquete principal como cualquier otro paquete incluido (como un marco compartido para la programación de extensiones o terceros marcos como AFNetworking), de esta manera:
NSBundle.mainBundle().releaseVersionNumber
NSBundle.mainBundle().buildVersionNumber
// or...
NSBundle(URL: someURL)?.releaseVersionNumber
NSBundle(URL: someURL)?.buildVersionNumber
Respuesta original
Quería mejorar algunas de las respuestas ya publicadas. Escribí una extensión de clase que se puede agregar a su cadena de herramientas para manejar esto de una manera más lógica.
extension NSBundle {
class var applicationVersionNumber: String {
if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"]
¿como? Cadena {return version} return "Número de versión no disponible"}
class var applicationBuildNumber: String {
if let build = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String {
return build
}
return "Build Number Not Available"
}
}
Así que ahora puedes acceder a esto fácilmente al:
let versionNumber = NSBundle.applicationVersionNumber