Tengo una aplicación IOS con un back-end de Azure, y me gustaría registrar ciertos eventos, como inicios de sesión y qué versiones de los usuarios de la aplicación se están ejecutando.
¿Cómo puedo devolver la versión y el número de compilación usando Swift?
CFBundleVersion
& CFBundleShortVersionString`. El primero es su versión de compilación . El otro es el número de versión . Ver aquí para más informaciónRespuestas:
EDITAR
Actualizado para Swift 4.2
EDITAR
Como señaló @azdev en la nueva versión de Xcode, obtendrá un error de compilación al probar mi solución anterior, para resolver esto solo edítelo como se sugiere para desenvolver el diccionario de paquetes usando a!
Fin de edición
Simplemente use la misma lógica que en Objective-C pero con algunos pequeños cambios
Espero que esto te ayude.
David
fuente
infoDictionary
debe desenvolver usando!
. Esto es lo que estoy usando, colocado en un archivo Globals.swift:let appVersion = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as String
let appVersion = NSBundle.mainBundle().infoDictionary!["CFBundleVersion"] as! String
Sé que esto ya ha sido respondido, pero personalmente creo que esto es un poco más limpio:
Swift 3.0:
Swift <2.3
De esta manera, la versión if let se encarga del procesamiento condicional (configurando el texto de la etiqueta en mi caso) y si infoDictionary o CFBundleShortVersionString son nulos, el desenvolvimiento opcional hará que se omita el código.
fuente
self.labelVersion.text
es tipo opcional, por lo que puede asignar directamenteNSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
let
, solo preguntándome por qué podría ser necesario. ¡Gracias!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:Antigua respuesta actualizada
Respuesta original
fuente
También sé que esto ya ha sido respondido, pero resumí las respuestas anteriores:
(*) Actualizado para extensiones
Uso:
@Deprecated: respuestas anteriores
Swift 3.1 :
Para versiones anteriores :
Entonces, si desea establecer el texto de la etiqueta o desea usarlo en otro lugar;
fuente
Para Swift 4.0
fuente
Hice una extensión en el paquete
y luego úsalo
fuente
Para Swift 3.0 NSBundle no funciona, el siguiente código funciona perfectamente.
y solo por el número de compilación, es:
Confusamente, 'CFBundleVersion' es el número de compilación que se ingresó en Xcode en General-> Identidad.
fuente
Xcode 9.4.1 Swift 4.1
Tenga en cuenta el uso de localizedInfoDictionary para elegir la versión de idioma correcta del nombre para mostrar del paquete.
fuente
Xcode 8, Swift 3:
fuente
Swift 4, extensión útil para Bundle
fuente
Paquete + Extensiones.swift
Uso:
fuente
OP solicitó tanto el número de versión como el número de compilación. Desafortunadamente, la mayoría de las respuestas no brindan ambas opciones. Además, otros agregan métodos de extensión innecesarios. Aquí hay uno que es bastante simple y resuelve el problema de OP:
fuente
Mi respuesta (a agosto de 2015), dado que Swift sigue evolucionando:
fuente
Creé una extensión para UIApplication.
fuente
Después de mirar la documentación, creo que lo siguiente es más limpio:
Fuente : "El uso de este método es preferible a otros métodos de acceso porque devuelve el valor localizado de una clave cuando hay una disponible".
fuente
Para Swift 1.2 es:
fuente
Swift 3:
Número de versión
Número de compilación
fuente
Swift 4
Rápida sintaxis antigua
fuente
Atención: debe usarlo si lo deja aquí en caso de que la versión o compilación de la aplicación no esté configurada, lo que provocará un bloqueo si intenta usarlo. para desenvolver.
fuente
Aquí hay una versión actualizada para Swift 3.2:
fuente
Ahora puede usar una constante para esto, en lugar de tener que usar código de tipo secuencial como antes, lo que hace que las cosas sean aún más convenientes.
fuente
fuente
SWIFT 4
// Primero obtenga el nsObject definiéndolo como un AnyObject opcional
// Luego simplemente lanza el objeto como una Cadena, pero ten cuidado, es posible que quieras verificar dos veces si es nulo
fuente
Para cualquier persona interesada, hay una biblioteca agradable y ordenada
SwifterSwift
disponible en github y también totalmente documentada para cada versión de swift (ver swifterswift.com ).usando esta biblioteca, leer la versión de la aplicación y el número de compilación sería tan fácil como esto:
fuente
Actualización para Swift 5
Aquí hay una función que estoy usando para decidir si mostrar una página "la aplicación actualizada" o no. Devuelve el número de compilación, que estoy convirtiendo en un Int:
Si nunca se usó antes, devolverá 0, que es inferior al número de compilación actual. Para no mostrar dicha pantalla a los nuevos usuarios, simplemente agregue el número de compilación después del primer inicio de sesión o cuando se complete la incorporación.
fuente
Para Swift 5.0 :
fuente
Función de utilidad simple para devolver la versión de la aplicación como Int
fuente
fuente
Bundle + Extension.swift (SwiftUI, Swift 5, Xcode 11)
Combiné ideas de algunas respuestas y extendí un poco:
Fundación de importación
paquete de extensión {
}
Uso de ejemplo de SwiftUI
fuente
fuente