Diferencia entre la versión de Xcode (CFBundleShortVersionString) y la compilación (CFBundleVersion)

94

Resumen de destino de la aplicación

En Xcode 4, veo esto para el resumen de mi objetivo:

La entrada "Versión" corresponde a CFBundleShortVersionStringen el archivo info.plist, y la entrada "Compilación" corresponde a CFBundleVersion.

¿Cuál es la diferencia entre estos dos? Veo a mucha gente en Internet que quiere dar el mismo valor a ambos, y sospecho que es por compatibilidad con versiones anteriores.

Tengo dos preguntas:

1) Si estuviera empezando desde cero, ¿cuál sería la mejor práctica para versionar su aplicación?

2) En todas las versiones anteriores de mi aplicación, solo usé CFBundleVersion. Para no estropear el proceso de actualización, ¿debo seguir aumentando de la CFBundleVersionmisma manera que lo he hecho o es posible cambiar a la "forma correcta", suponiendo que exista una?

Philip Walton
fuente
3
Este es un duplicado de stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4 pero quizás esta versión esté mejor expresada (y tenga una captura de pantalla).
Daniel Dickison
¿Hay algo que deba hacer para mostrar el campo Generar en su Resumen? Solo veo una versión, pero ningún campo de compilación.
Kenny Wyland

Respuestas:

68

El documento de Apple "Information Property List Key Reference" dice que CFBundleShortVersionStringrepresenta una versión de lanzamiento, mientras que CFBundleVersionrepresenta cualquier construcción, lanzada o no. Además, CFBundleShortVersionStringse puede localizar, aunque no sé por qué lo querrías, ya que dicen que se supone que es "una cadena compuesta por tres enteros separados por puntos". Para una versión de lanzamiento, sería razonable hacer que los dos números fueran iguales. Para una compilación de desarrollo, puede agregar algo más CFBundleVersion, tal vez otro punto y un entero.

JWWalker
fuente
Pero si actualmente he estado usando 1.3.1 como my CFBundleVersiony nada como my CFBundleShortVersionString, y quiero cambiar a using CFBundleVersionpara representar compilaciones internas, entonces necesito al menos comenzar con un número entero superior a 1.3.1, ¿verdad? ¿O hacer ese cambio es solo buscar problemas?
Philip Walton
La versión ( CFBundleShortVersionString) es lo único que importará para enviar a Apple. Build ( CFBundleVersion) se puede utilizar como desee en el desarrollo o para mostrarlo en su aplicación. Use octal (base-8) e itere en reversa por 12, si lo desea.
nekno
16
nekno: En realidad, CFBundleVersion es lo que le importa a Apple. Verifique este mensaje de error que Apple da al enviar una aplicación: "El binario que cargó no es válido. La clave CFBundleVersion en el archivo Info.plist debe contener una versión superior a la versión cargada anteriormente".
Malhal
10
Algunos países usan números distintos del árabe moderno que se usa en el mundo occidental, como el árabe oriental (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) o el hebreo (א, ב, ג, ד, ה, ו, ז, ח, ט) - y esos dos también se escriben de derecha a izquierda. Hay muchos otros sistemas de numeración por ahí (ver en.wikipedia.org/wiki/Category:Numerals ) Así que supongo que eso es lo que Apple quiere decir con número de versión "localizable".
Ruslan Ulanov
Por cierto, los tres dígitos con puntuación no son necesarios. En su lugar, he estado usando un valor de fecha y hora como 201606070620para ambos valores en una aplicación de envío iOS 7-8-9.
Basil Bourque
3

A la pregunta de JWWalker sobre por qué querría localizar CFBundleShortVersionString, ese sería el separador decimal. Por ejemplo, en entornos locales donde el separador decimal es en realidad una coma, la versión "1.5" sería "1,5".

Arjun
fuente
30
En mi opinión, no es necesario localizar los números de versión. Vivo en una región donde el separador decimal es una coma (Alemania) y estoy acostumbrado a los números de versión separados por un punto. De hecho, no recuerdo haber visto nunca un número de versión con una coma.
Christian Specht
2
También vivo en una región que usa la coma como separador decimal, aunque 1,3,1 es un valor bastante extraño, 1.3.1 parece mucho mejor.
Lucien
1
Creo que significa que puedes tener diferentes versiones de la aplicación para diferentes regiones. 1.2.1> en.lproj 1.2.2> fr.lproj Aunque toda la lista se copia cuando localiza el archivo, por lo que ambos números de versión se copian para que ambos 'se puedan localizar'
brian.clear
1

Arreglo rapido:

Simplemente agregue CFBundleShortVersionStringal archivo plist y edite su versión.

  1. Revela tu InfoPlist.strings
  2. Resáltelo y pegue el código a continuación en (asumiendo que está en modo de código fuente)

{"CFBundleShortVersionString" = "1.1";}

  1. Cambie el 1.1 por lo que sea su nueva construcción.
  2. ¡Construya y envíe sin más errores!

ingrese la descripción de la imagen aquí

Louie
fuente
1

Consulte la documentación de Apple sobre la carga de binarios.

Numeración de versiones y compilaciones: iTunes Connect extrae el número de versión preliminar y el número de compilación del binario. El número de versión preliminar es el número de versión de Xcode, o la clave "Cadena de versión de paquete, corta" en Info.plist. El número de compilación es el número de compilación de Xcode, o la clave "Versión del paquete" en Info.plist. El número de versión preliminar y el número de compilación se mostrarán en la pestaña Presentación, como se describe en Visualización de compilaciones.

Cargar un binario para una aplicación

GilesDMiddleton
fuente