El número de versión de Settings.bundle se actualiza como $ (MARKETING_VERSION)

8

Tengo una aplicación que estaba configurando versiones automáticamente cuando incrementé desde

XCode> General> Versión .

Pero recientemente he actualizado XCode a 11.0 y parece que el script no funciona como se esperaba:

version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $SRCROOT/MyApp/Info.plist`
version+=" ("
version+=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $SRCROOT/MyApp/Info.plist`
version+=")"
/usr/libexec/PlistBuddy "$SRCROOT/MyApp/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:1:DefaultValue $version"

El script anterior supone actualizar automáticamente la versión y habría sido visible en Configuración> Aplicación.

ingrese la descripción de la imagen aquí

Pero la pregunta es si se necesita hacer algún cambio para que este script actualice automáticamente el número de versión de XCode.

Actualmente está siendo reemplazado por scripts como $ (MARKETING_VERSION) cuando la versión se incrementa desde XCode> General> Versión que no es correcta.

Nagarjun
fuente
1
¿No es esto lo que estás buscando? How-to-read-current-app-version-in-xcode-11-with-script
Mojtaba Hosseini
Funcionó haciendo algunos cambios como se menciona en mi respuesta. Pero no estoy seguro de si es una buena idea extraer del guión gráfico como lo está haciendo.
Nagarjun
Eso no se extrae del guión gráfico. Eso lo reemplaza.
Mojtaba Hosseini
No estás usando sourceFilePath, ¿verdad?
Nagarjun
No (error), pero eso no es parte del problema;)
Mojtaba Hosseini

Respuestas:

5

La cadena de versión $MARKETING_VERSIONy el número de compilación $CURRENT_PROJECT_VERSIONahora se exponen como variable de entorno durante el proceso de compilación, ya que ahora se conservan en la .pbxprojconfiguración.

Deberías poder lograr lo que quieres así:

version="$MARKETING_VERSION ($CURRENT_PROJECT_VERSION)"
/usr/libexec/PlistBuddy "$SRCROOT/MyApp/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:1:DefaultValue $version"
dgimb
fuente
$ CURRENT_PROJECT_VERSION no muestra nada. Sin embargo, la versión se muestra en $ MARKETING_VERSION.
Nagarjun
2

Funcionó mostrando MARKETING_VERSION en sí: Gracias @dgimb y @Mojtaba Hosseini por sus respuestas.

version="$MARKETING_VERSION"
version+=" ("
version+=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $SRCROOT/MyApp/Info.plist`
version+=")"

/usr/libexec/PlistBuddy "$SRCROOT/MyApp/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:1:DefaultValue $version"
Nagarjun
fuente
Tengo un mensaje de error Set: Entry, "PreferenceSpecifiers: 1: DefaultValue", No existe el comando PhaseScriptExecution falló con un código de salida distinto de cero
ΩlostA
¿Puedes compartir el guión?
Nagarjun