¿Qué número (s) de versión / comstackción de la aplicación iOS DEBE incrementarse en la versión de App Store?

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

  • “Versión” 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 un período.

  • “Build” CFBundleVersion (String – iOS, OS X) especifica el número de versión de comstackción del paquete, que identifica una iteración (liberada o no publicada) del paquete. El número de versión de comstackción debe ser una cadena compuesta por tres enteros separados, no negativos, y el primer entero es mayor que cero. La cadena solo debe contener caracteres numéricos (0-9) y de punto (.). Los ceros iniciales se truncan desde 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 especifica al crear una nueva versión de la aplicación en iTunes Connect.

Mi pregunta es:

¿Qué números de versión / comstackción se deben incrementar cuando se carga una nueva versión de la aplicación en iTunes Connect y / o se lanza a la tienda de aplicaciones?

¿Puede la “versión” CFBundleShortVersionString o “build” CFBundleVersion permanecer igual entre las actualizaciones de la aplicación?

Puntos extra para las fonts de Apple o los mensajes de error exactos que iTunesConnect muestra al cargar un número de versión / comstackción no válido.


Nota de Android / Google Play:

La discusión que provocó esta pregunta es que la “versión” pública de una aplicación de Android en Google Play Store no necesita ser incrementada y de ninguna manera es validada. El android:versionName puede permanecer igual entre versiones, actualización, degradación o 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 versión de lanzamiento del código de la aplicación, como debería mostrarse a los usuarios.

El valor es una cadena para que pueda describir la versión de la aplicación como una cadena .. , o como cualquier otro tipo de identificador de versión absoluta o relativa.

Diferencia entre versionName y versionNumber en Android

Mientras que el android:versionCode se aplica para ser un entero incremental en lanzamiento.


Documentación de Apple

Como se señala en la respuesta recientemente aceptada , Apple ha publicado recientemente una Nota técnica que detalla su versión y el esquema de número de comstackción:

Nota técnica de Apple TN2420 – Números de versión y números de comstackción

Nota técnica de Apple TN2420, números de versión y números de comstackció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.

Número de versión y lista de verificación del número de comstackción

Aquí hay algunas cosas que puede verificar al enviar una nueva comstackción a la App Store. Asegurarse de tener su número de versión y número de comstackción establecidos correctamente le ayudará a evitar que su aplicación se rechace automáticamente por haberlos configurado 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 utilizó. Aunque puede proporcionar muchas comstackciones para cualquier versión 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 puede volver a utilizar los Números de versión.
  3. Por cada comstackción nueva que envíe, deberá inventar un nuevo Número de comstackción cuyo valor sea mayor que el último Número de comstackción que utilizó (para esa misma versión).
  4. Puede volver a utilizar Build Numbers en diferentes trenes de lanzamiento, pero no puede volver a utilizar Build Numbers dentro del mismo tren de lanzamiento.

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

  • Caso: reutilizar Build Number en diferentes trenes de lanzamiento.

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

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 su aplicación en la tienda de aplicaciones.

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

CFBundleVersion no se muestra en la App Store, pero lo usa iTunes para determinar cuándo se actualizó su aplicación.

Si actualiza la cadena de comstackción, como se describe en “Configuración del número de versión y la cadena de comstackción”, iTunes reconoce que la cadena de comstackción cambió y sincroniza correctamente el nuevo paquete de la Tienda de aplicaciones de iOS para probar los dispositivos.

Fuente

Respondiendo a sus preguntas más específicamente …

¿Qué números de versión / comstackción deben incrementarse cuando se carga una nueva versión de la aplicación en la tienda de aplicaciones?

Ambos. Uno se muestra en la tienda de aplicaciones, el otro es utilizado por iTunes para actualizar la aplicación.

¿Puede CFBundleShortVersionString o CFBundleVersion ser el mismo 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 comstackción será diferente y el usuario querrá saber al respecto). Si lo intenta, verá los siguientes mensajes de error:

Error de mensajes

¿O se los compara con el número respectivo anterior para garantizar que se cargue un número numéricamente mayor con la nueva versión de la aplicación?

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

¿Los números CFBundleShortVersionString y CFBundleVersion se comparan entre sí de alguna manera?

No.

CFBundleShortVersionString es el “nombre” público de la versión (ejemplo: “2.5” o “3.8.1”). Debe boostlo en cada lanzamiento .

CFBundleVersion es el número de comstackción privado. No se ve en la AppStore. Debe boostlo en cada carga . Significa que si alguna vez rechaza un binario antes de conectarse y desea cargar un nuevo binario, tendrá el mismo CFBundleShortVersionString, pero debe tener una CFBundleVersion más alta (ejemplo: public “2.5”, private “2.5”, y luego rechazo binario y volver a subir la versión privada “2.5.1”)

Editar el 16 de noviembre de 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, entonces 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).

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. Debes encontrarlos en tu -info.plist.

Cuando intentes validar la aplicación en el organizador arrojará un error si alguno de ellos no se ha incrementado. Me pasó anoche.

Tanto CFBundleVersion como CFBundleShortVersionString DEBEN incrementarse al lanzar una nueva versión en la App Store.

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

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

Esta pregunta incluye la captura de pantalla anterior del Validador del organizador de Xcode 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 la clave CFBundleVersion [1.0] en el archivo Info.plist debe contener una versión superior a la de la versión cargada previamente [1.134].

  • Este paquete no es válido El valor de la clave CFBundleShortVersionString [1.0] en el archivo Info.plist debe contener una versión superior a la de la versión cargada anteriormente [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.

  • Versión no coincide. Ni CFBundleVersion [‘1.0’] ni CFBundleShortVersionString [‘1.0’] en Info.plist coinciden con la versión de la aplicación establecida en iTunes Connect [‘1.4’].

Necesita incrementar ambos .

Al cargar una nueva versión, deberá crear una nueva versión en iTunes Connect, que automáticamente será más alta que las versiones anteriores. Esta versión en iTunes Connect esperará un binario con el mismo número de versión, por lo tanto, CFBundleShortVersionString necesita ser incrementado.

Si actualiza la versión pero olvida CFBundleVersion la CFBundleVersion , se encontrará con un error durante la carga. Vea la respuesta y captura de pantalla de pkamb.

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

AFAIK, fuera de mi cabeza, solo necesitas incrementar el número de comstackción CFBundleVersion . No es necesario boost la cadena de versión corta, aunque probablemente debería incrementarla, ya que le dice al usuario que la aplicación es nueva. Sin embargo, Apple dice que la numeración debe seguir las convenciones de versiones de software tradicionales, y iTunes Connect puede quejarse si intenta volver a cargar una versión ya existente.

Para resumir, puede funcionar, pero probablemente no.