¡Hay 2 números!
El número de versión de marketing es para los clientes, llamado número de versión . Comienza con 1.0 y sube para actualizaciones importantes a 2.0 , 3.0 , para actualizaciones menores a 1.1 , 1.2 y para correcciones de errores a 1.0.1 , 1.0.2 . Este número está orientado sobre lanzamientos y nuevas características. No tiene que detenerse en 9, 1.11.23 es un número de versión razonable.
El número de compilación es principalmente el número interno de compilaciones que se han realizado hasta entonces. Pero algunos usan otros números como el número de sucursal del repositorio o su número de confirmación. Este número debe ser único para distinguir las diferentes compilaciones, que solo tienen cambios incrementales menores.
Para obtener el número de versión :
C objetivo:
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
Swift <3.0:
let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
Swift 3.0+ (probado con 5.0):
let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
Para obtener el número de compilación :
C objetivo:
NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
Swift <3.0:
let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Swift 3.0+ (probado hasta 5.0):
let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Si quieres ambos en uno:
Primero use las líneas anteriores y luego la siguiente.
C objetivo:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (probado hasta 5.0):
let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"
Notas:
Los valores en el paquete principal no siempre están presentes, por ejemplo, en una aplicación de línea de comandos no hay CFBundleShortVersionString
o CFBundleVersion
, por lo que los métodos devolveránnil
y se bloqueará porque en el código hace un downcast incorrecto. Pero en las aplicaciones normales de Cocoa para iOS y Mac, estos valores están definidos y no se eliminarán.
Esto se prueba con Xcode Versión 7.3 (7D175) . El número de compilación a menudo se escribe entre paréntesis / llaves. El número de compilación está en hexadecimal o decimal.
En Xcode , puede aumentar automáticamente el número de compilación como un número decimal colocando lo siguiente en la Run script
fase de compilación en la configuración del proyecto
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
Para el número de compilación hexadecimal, use este script
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber))
buildNumber=$(($buildNumber + 1))
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
Para Xcode
hacer lo siguiente:
Paso 1
Paso 2
Paso 3
Bundle.main.object(forInfoDictionaryKey: "...")
ahora.No necesita cambiar nada en su proyecto o Xcode. Aquí está la versión Swift para ambos por separado:
Está incluido en este repositorio, échale un vistazo:
https://github.com/goktugyil/EZSwiftExtensions
fuente
Bundle.main.object(forInfoDictionaryKey: "...")
ahora.Aquí el mismo código para Swift 3 :
fuente
Bundle.main
tenía un vacíoinfoDictionary
para mí; tal vez porque lo estoy haciendo desde un marco, no un ejecutable o aplicación?Bundle(for: MyClass.self)
Contiene los valores esperados.Mostrar mediante programación la versión y el número de compilación - Swift 4.0
fuente
También puedes usar como
Luego puede usar en cualquier lugar cuando declara Globalmente.
Salida:
fuente
Hice una extensión para Bundle para que sea fácil de usar
fuente