¿Cuál es la diferencia entre "número de versión" en iTunes Connect, "versión del paquete", "cadena de la versión del paquete" en Xcode?

94

El documento de Apple podría haber sido más claro sobre cómo enviar una versión de actualización.

Como se pregunta en el título, ¿Cuál es la diferencia entre

  1. número de versión en itunes connect (que debe proporcionar cuando envía una actualización)
  2. versión del paquete en xcode
  3. paquete de versiones cadena, corta

¿Están relacionados de alguna manera?

Eugenio
fuente
12
Apple y sus términos / campos confusos ...: /
BoltClock
Consulte mi respuesta anterior: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

Respuestas:

143

Sí, están relacionados. Todos se refieren a la versión de su aplicación.

  • iTunes Connect
    Este es el número de versión que se muestra en la App Store; Debe ser un número de versión puro como1.2.3

  • Versión de paquete (CFBundleVersion)
    No es necesario que sea un número de versión puro. Esto puede ser algo como 12345o 1.2.3 (Build 12345AB). Esto se muestra en la ventana Acerca de para las aplicaciones de Mac OS X, por ejemplo, y a menudo es más un "Número de compilación" que un "Número de versión".

  • Cadena de versión de paquete (CFBundleShortVersionString) Este valor se utiliza como el número de versión "real". Esta debe ser la misma cadena que se utiliza para la versión de iTunes Connect .

Actualización:
como lo señaló @snlehton, CFBundleVersion tiene que ser un número de versión puro, como 1.2.3cuando desea cargar su aplicación en la App Store (iOS).

Fabián Kreiser
fuente
3
Para las pruebas , establezca la cadena de la versión del paquete en el número de versión final como 1.2.3y luego incremente la versión del paquete para cada compilación.
Fabian Kreiser
19
ESTO ES INCORRECTO CFBundleVersion debe estar en xyz, de lo contrario, la carga de una compilación fallará. enlace
snlehton
2
Recientemente envié una compilación con CFBundleVersion con "1.0.2 RC3" y rebotó con el mensaje de error: "El paquete no es válido. La clave CFBundleVersion en el archivo Info.plist debe ser una lista separada por puntos de números enteros no negativos". Creo que nn.n.nxnnn es el formato correcto para usar, pero aún no lo he probado.
snlehton
3
CFBundleVersion de 1235 aquí, sin problemas
Piotr Tomasik
4
La confusión aquí se debe a que CFBundleShortVersionString es opcional y cuando se establece cambia para qué se utiliza CFBundleVersion. Si solo incluye CFBundleVersion, entonces debe ser el número de versión pública, por ejemplo, 1.0. Sin embargo, si tanto CFBundleVersion como CFBundleShortVersionString están configurados, CFBundleShortVersionString ahora debe incluir el número de versión pública, por ejemplo, 1.0. Y ahora CFBundleVersion cambia para ser el número de compilación, que normalmente es un solo entero, por ejemplo, 374629. Con suerte, esto lo aclara.
Malhal
27

Sí, están relacionados, pero su definición depende de cómo se utilicen.

  • Versión de iTunes Connect

    Siempre debe ser un número de versión, por ejemplo, 1.0

Modo de uso 1: solo se establece CFBundleVersion

  • Versión de paquete (CFBundleVersion)

    Debe ser un número de versión, por ejemplo, 1.0. Debe coincidir con la versión de iTunes Connect.

Modo de uso 2: se establecen CFBundleVersion y CFBundleShortVersionString

  • Versión de paquete (CFBundleVersion)

    Debe ser un número de compilación, por ejemplo, un solo entero como 435163.

  • Cadena de versión corta del paquete (CFBundleShortVersionString)

    Debe ser un número de versión, por ejemplo, 1.0. Debe coincidir con la versión de iTunes Connect.

El modo de uso 2 es la mejor manera de hacerlo. A continuación, se muestran algunos números de ejemplo para la ruta de actualización de una aplicación:

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

Una nota adicional sobre los números de versión: si envía una actualización menor (por ejemplo, corrección de errores) a su aplicación, nunca debe perderse puntos en el número de versión, por ejemplo, use siempre 1.0.1 y NUNCA 1.01 o correrá el riesgo de no poder usar ciertos números de versión en el futuro porque no será posible incrementarlos.

malhal
fuente
2
Esa tabla por sí sola hace el mejor trabajo al explicar cómo estos dos números se relacionan y se usan en la práctica. Gracias.
Joshua Pinter
Debe coincidir con la versión de iTunes Connect. Este no es un requisito difícil (incluso si debería ser un OBLIGATORIO)
Marco Pappalardo
13

Sí, todos están relacionados.

El número de versión en itunesconnect es el número de versión que debe proporcionar. Por ejemplo, 2.1.1 o 3.1.2, etc. Esto también debería ser igual a CFBundleShortVersionString .

La versión del paquete en Xcode ( CFBundleVersion ) representa solo el número de compilación que identifica una iteración (publicada o no publicada) de la aplicación.

La cadena de versiones del paquete, corta ( CFBundleShortVersionString ) es un número que consta de tres enteros separados por puntos. El primero representa cualquier actualización importante de la aplicación, como actualizaciones que implementan nuevas funciones o cambios importantes. El segundo número entero denota revisiones que implementan características menos prominentes. El tercer número entero representa las versiones de mantenimiento.

mayuur
fuente
3
En realidad, "Cadena de versiones de paquete, corta" no necesita ser TRES números separados por puntos. Creo que "1" y "1.1" también son válidos.
Nicolas Miari
en realidad, de mi versión de prueba, el número en itunesconnect es completamente independiente de CFBundleVersion y ShortVersion. Así que incluso puedes tenerlos diferentes
Marco Pappalardo
11

Tenga cuidado con CFBundleVersion . No es solo un número de construcción de producción. Apple comprueba este valor durante el proceso de carga binaria y puede fallar.

Asegúrese de configurar CFBundleVersion con el valor de CFBundleShortVersionString cuando cree su versión para su envío.

Ver esta publicación al respecto

aponaute
fuente
3
Esta es la información correcta, la respuesta aceptada en realidad es incorrecta.
snlehton
9
Esto no es correcto, CFBundleVersionno tiene por qué coincidir CFBundleShortVersionString. Por ejemplo, si miras el archivo .ipa actual para Chrome (en la tienda de aplicaciones ahora), tienen "34.0.1847.18" para CFBundleVersiony "34.1847.18" para CFBundleShortVersionString.
progrmr
6
No hay documentación que diga que CFBundleVersion y CFBundleShortVersionString deberían ser iguales.
Toydor
8

La respuesta aceptada es el camino a seguir, solo agregue esto como ejemplo.

Para nuestra última versión, se requería la "Cadena de versión del paquete, corta", y seguí adelante y la combiné con el número de versión del paquete (1.2.8 para nuestra aplicación).

Luego habilité Testflight e hice que la versión pendiente de revisión de Apple (1.2.8) estuviera disponible para nuestros evaluadores internos. Sin embargo, un evaluador encontró un problema que requería solución y eliminamos el binario en su lugar. Al cargar una nueva compilación, recibimos un error que indica que la versión de compilación ya se cargó.

Después de leer algunos enlaces SO y documentos de Apple, entendí que debía hacer la versión del paquete: 1.2.8.001, mientras se mantenía la versión del paquete corta tal como estaba. Si se requiere una nueva compilación, incrementamos la versión del paquete a 1.2.8.002.

Nota: se aceptó la carga y la compilación aparece como "1.2.8.001" en la versión preliminar. El número de versión sigue siendo 1.2.8.

ahash
fuente
3

La respuesta aceptada de este enlace contiene buenos detalles: ¿Qué versión de la aplicación iOS / número (s) de compilación DEBEN incrementarse en el lanzamiento de la App Store?

De los documentos de Apple

CFBundleVersion (versión de paquete)

CFBundleVersion (String: iOS, OS X) especifica el número de versión de compilación del paquete, que identifica una iteración (publicada o no publicada) del paquete. El número de versión de compilación debe ser una cadena compuesta por tres enteros separados por puntos no negativos, siendo el primer entero mayor que cero. La cadena solo debe contener caracteres numéricos (0-9) y punto (.). Los ceros iniciales se truncan de cada entero y se ignorarán (es decir, 1.02.3 es equivalente a 1.2.3). Esta clave no es localizable.

CFBundleShortVersionString (cadena de versiones de paquete, corta)

CFBundleShortVersionString (String - iOS, OS X) especifica el número de versión de lanzamiento del paquete, que identifica una iteración lanzada de la aplicación. El número de versión de lanzamiento es una cadena compuesta por tres enteros separados por puntos. El primer número entero representa revisiones importantes de la aplicación, como revisiones que implementan nuevas funciones o cambios importantes. El segundo número entero denota revisiones que implementan características menos prominentes. El tercer número entero representa las versiones de mantenimiento.

El valor de esta clave difiere del valor de CFBundleVersion, que identifica una iteración (publicada o no publicada) de la aplicación. Esta clave se puede localizar incluyéndola en sus archivos InfoPlist.strings.

bozal
fuente