¿Qué número(s) de versión/compilación de la aplicación de iOS DEBE (n) incrementarse en el lanzamiento de la Tienda de aplicaciones?


Los campos de versión/compilación para una aplicación iOS incluyen:

  • "Version" CFBundleShortVersionString (String - iOS, OS X) especifica el número de versión de lanzamiento del paquete, que identifica una iteración liberada de la aplicación. El número de versión de lanzamiento es una cadena compuesta por tres enteros separados por períodos.

  • "Build" CFBundleVersion (String - iOS, OS X) especifica el número de versión de compilación del paquete, que identifica una iteración (lanzado o inédito) del paquete. El número de versión de compilación debe ser una cadena compuesta de tres enteros no negativos separados por períodos, con el primer entero mayor que cero. La cadena solo debe contener numérica (0-9) y punto (.) caracter. Los ceros a la izquierda 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.

  • "Número de versión de iTunes Connect" : número de versión que especifique cuando crear una nueva versión de la aplicación en iTunes Connect.

Mi pregunta es:

¿Qué números de versión/compilación se requieren para ser incrementados cuando una nueva versión de la aplicación se carga en iTunes Connect y/o se lanza a la Tienda de aplicaciones?

¿Puede "version" CFBundleShortVersionString o "build" CFBundleVersion permanecer igual entre las actualizaciones de la aplicación?

Puntos extra para las fuentes de Apple o los mensajes de error exactos que iTunesConnect muestra al cargar una versión/compilación no válida numero.


Android / Google Play nota:

La discusión que provoca esta pregunta es que la "versión" pública de una aplicación Android en Google Play Store no necesita ser incrementada y está en de ninguna manera validada. El android:versionName puede permanecer igual entre versiones, actualizaciones, degradaciones, o ser cualquier cadena aleatoria en lugar de algo que parece ser un "número de versión"válido.

android:versionName - Un valor de cadena que representa la liberación versión del código de la aplicación, como debe mostrarse a los usuarios.

El valor es una cadena para que pueda describir la versión de la aplicación como una cadena <major>.<minor>.<point>, o como cualquier otro tipo de identificador de versión absoluto o relativo.

Diferencia entre versionName y versionNumber en Android

Mientras que el android:versionCode se aplica para ser un entero incremental en la liberación.


Documentación de Apple

Como se indica en el nuevo respuesta aceptada, Apple ha publicado recientemente una Nota Técnica que detalla su versión y esquema de número de compilación:

Nota Técnica de Apple TN2420 - Números de Versión y Números de Compilación

Author: pkamb, 2014-01-15

7 answers

Nota Técnica de Apple TN2420, Números de versión y Números de compilación

Resumen:

  • El par (Version, Build number) debe ser único.
    • La secuencia es válida: (1.0.1, 12) -> (1.0.1, 13) -> (1.0.2, 13) -> (1.0.2, 14) ...
  • Version (CFBundleShortVersionString ) debe estar en orden secuencial ascendente.
  • Build number (CFBundleVersion ) debe estar en orden secuencial ascendente.

Lista de Verificación de Número de Versión y Número de compilación

Estas son algunas cosas que puedes comprobar al enviar una nueva compilación a la App Store. Asegurarse de que tiene su Número de Versión y Número de compilación configurado correctamente le ayudará a evitar que su Aplicación sea rechazada automáticamente por tenerlos configurados incorrectamente.

  1. Para cada nueva versión de su Aplicación, debe inventar un nuevo número de versión. Este número debe ser un valor mayor que el último Número de Versión que utilizar. Aunque puede proporcionar muchas compilaciones para cualquier versión en particular de su Aplicación, solo necesita usar un nuevo Número de versión para cada nueva versión de su Aplicación.
  2. No se pueden reutilizar los Números de versión.
  3. Para cada nueva compilación que envíe, tendrá que inventar un nuevo Número de Compilación cuyo valor sea mayor que el último Número de compilación que utilizó (para esa misma versión).
  4. Puede reutilizar los números de compilación en diferentes trenes de publicación, pero no puede reutilizar los números de compilación dentro de el mismo tren de liberación.

Basado en la lista de verificación, la siguiente secuencia (Version, Build Number) también es válida.

  • Caso: reutilizar Build Number en diferentes trenes de liberación.

    (1.0.0, 1) -> (1.0.0, 2) -> ... -> (1.0.0, 11) -> (1.0.1, 1) -> (1.0.1, 2)

 56
Author: AechoLiu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-12 02:57:19

El CFBundleShortVersionString debe coincidir con el número de versión que le das a iTunes Connect. También es el número de versión que aparece cuando el usuario mira tu Aplicación en la App Store.

El número de versión se muestra en la tienda y esa versión debe coincidir con el número de versión que ingrese más tarde en iTunes Connect.

Fuente

El CFBundleVersion no se muestra en la App Store, pero iTunes lo utiliza para determinar cuándo se ha actualizado la aplicación.

Si al actualizar la cadena de compilación, como se describe en "Configuración del número de versión y la cadena de compilación", iTunes reconoce que la cadena de compilación ha cambiado y sincroniza correctamente el nuevo paquete de iOS App Store para probar los dispositivos.

Fuente

Respondiendo a sus preguntas más específicamente...

¿Qué números de versión/compilación deben incrementarse cuando se carga una nueva versión de la aplicación en la app store?

Ambos. Se muestra en la Aplicación Tienda, el otro es utilizado por iTunes para actualizar la aplicación.

Puede CFBundleShortVersionString o CFBundleVersion permanecer igual entre las actualizaciones de la aplicación?

No. (Meta pregunta, ¿cuál sería el caso de uso aquí? Si ha editado la carga útil de alguna manera, la compilación será diferente, y el usuario querrá saber sobre ella). Si lo intentas, verás mensajes de error como los siguientes:

Mensajes de error

O se comparan con el número respectivo anterior a asegúrese de que se cargue un número numéricamente mayor con la nueva versión de la aplicación?

Sí. Usando el semver.org estándar.

¿Son los números CFBundleShortVersionString y CFBundleVersion de alguna manera comparados entre sí?

No.

 36
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 23:49:44

CFBundleShortVersionString es el "nombre" público de la versión (ejemplo: "2.5", o "3.8.1"). Usted debe aumentarlo en cada liberación.

CFBundleVersion es el construir número. No se ve en la AppStore. Usted debe aumentarlo en cada subir. Significa que si alguna vez rechaza un binario antes de que se conecte, y desea cargar un nuevo binario, tendrá lo mismo CFBundleShortVersionString pero debe tener una mayor CFBundleVersion (ejemplo: public "2.5", private "2.5", y luego binary reject, y volver a cargar private "2.5.1")

Editar en noviembre 16, 2016:

/!\ La propiedad CFBundleVersion también se usa (junto con CFBundleName) en el encabezado User-Agent enviado por NSURLConnection en su código.

Ejemplo: si CFBundleName es MyApp y CFBundleVersion es 2.21, luego cualquier consulta HTTP programática enviada directamente por su código usando NSURLConnection incrustará el encabezado:

User-Agent: MyApp/2.21 CFNetwork/... Darwin/...

(Esto no se aplica a las solicitudes emitidas automáticamente por UIWebView).

 23
Author: Gabriel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-16 08:40:52

CFBundleVersion y CFBundleShortVersionString deben ser mayores que el último número de versión de la aplicación. Es una buena práctica mantenerlos igual. Deberías encontrarlos en tu-info.plist.

Cuando intente validar la aplicación en organizer, se producirá un error si alguna de ellas no se ha incrementado. Me pasó anoche.

 5
Author: xoail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 23:18:16

Ambos CFBundleVersion y CFBundleShortVersionString DEBE incrementarse al lanzar una nueva versión a la App Store.

Además, una de las cadenas debe coincidir con la versión especificada en iTunes Connect.

Xcode Organizer Validator error: debe incrementar el número de versión.

Esta pregunta incluye la captura de pantalla anterior del Validador de Xcode Organizer que se niega a validar la aplicación cuando CFBundleVersion y CFBundleShortVersionString no se han incrementado.

  • Este paquete no es válido. El valor de key CFBundleVersion [1.0] en el INFO.el archivo plist debe contener una versión superior a la de la versión previamente cargada [1.134].

  • Este paquete no es válido. El valor de key CFBundleShortVersionString [1.0] en la Información.el archivo plist debe contener una versión superior a la de la versión previamente cargada [1.134].

El validador también arroja un error que demuestra que una de las cadenas debe coincidir con la versión de la aplicación creada en iTunes Connect.

  • Desajuste de versión. Ni Elemento Cfbundleversion ['1.0'] ni CFBundleShortVersionString ['1.0'] en la Información.plist coincide con la versión de la aplicación establecida en iTunes Connect ['1.4'].
 5
Author: pkamb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:20

Necesitas incrementar ambos.

Al cargar una nueva versión, deberá crear una nueva versión en iTunes Connect, que automáticamente será mayor que las versiones anteriores. Esta versión en iTunes Connect estará esperando un binario con el mismo número de versión, por lo que CFBundleShortVersionString debe incrementarse.

Si actualiza la versión pero olvida incrementar el CFBundleVersion, se encontrará con un error durante la carga. Véase la respuesta de pkamb y pantallazo.

Para obtener más información sobre CFBundleShortVersionString y CFBundleVersion, consulte: https://stackoverflow.com/a/31921249/936957

 1
Author: Yunus Nedim Mehel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:20

AFAIK, en la parte superior de mi cabeza, solo necesitas incrementar el número de compilación CFBundleVersion. Aumentar la cadena de versión corta no es necesariamente necesario, aunque probablemente debería incrementarlo, ya que le dice al usuario que la aplicación es nueva. Apple dice que la numeración debe seguir las convenciones tradicionales de control de versiones de software, sin embargo, y iTunes Connect puede quejarse si intenta volver a cargar una versión ya existente.

En resumen, puede funcionar, pero probablemente no.

 -2
Author: SevenBits,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 22:22:58