Este es mi primer envío de aplicación para iOS y no quiero que mi aplicación sea rechazada.
Esto es de Apple Docs:
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 (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 números 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.
Pero parece un poco extraño. Mi interpretación para esto es poner ambos valores iguales, es decir:
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
¿Alguien puede confirmar al 100% que es lo que se supone que debo poner?
Respuestas:
Piénselo de esta manera: la "versión corta" (
CFBundleShortVersionString
) es el número de versión pública. La "versión" (CFBundleVersion
) es más un número de versión interno que podría cambiar con mucha más frecuencia que la "versión corta" pública. Personalmente uso lo mismo para ambos, pero mucha gente actualiza la "versión" en cada compilación. De cualquier manera, normalmente actualiza la "versión corta" cuando la lanza a Apple. La frecuencia con la que actualice la "versión" depende de usted y de sus necesidades.fuente
CFBundleShortVersionString le brinda la versión de su aplicación. Por lo general, se incrementa cada vez que publica su aplicación en la App Store. Esta es la versión que está visible en la sección "Versión" de la página App Store de su aplicación.
CFBundleVersion le proporciona el número de compilación que se utiliza para el desarrollo y las pruebas, es decir, con fines "técnicos". El usuario final rara vez está interesado en el número de compilación, pero durante el desarrollo es posible que deba saber qué se está desarrollando y arreglando en cada compilación. Por lo general, esto se incrementa en cada iteración de la versión interna. Y puede usar herramientas de integración continua como Jenkins para incrementar automáticamente el número de compilación en cada compilación.
Los dos números no dependen el uno del otro, pero es una buena idea mantenerlos paralelos para evitar confusiones. Tenga en cuenta que una vez que su aplicación haya pasado la revisión de la App Store, debe incrementar el número de compilación como lo han dicho Phil y likeTheSky, independientemente de si la publica o no.
Caso de uso: digamos que tiene una compilación bien probada, lista para enviar. Su número de versión es 1.0.0 y el número de compilación es 1.0.0.32 . Una vez que envíe su aplicación, debe actualizar la versión como 1.0.1 y el número de compilación como 1.0.1.0 .
fuente
201606070620
en una aplicación iOS de envío.La respuesta de rmaddy es correcta. Agregaré dos pensamientos más.
Número de la tercera versión
Tenga en cuenta el número de la tercera versión, especificado en el sitio web iTunesConnect como parte de la definición de su aplicación. Si ese número es diferente a los dos en Xcode, Apple le da una advertencia. Puede ignorar la advertencia, ya que no es un impedimento (no es un "error").
Fecha y hora como versión
Además, no es necesario utilizar tres números con puntuación. Eso puede tener sentido para algunas aplicaciones, donde tradicionalmente los cambios en el primer número indicaban algún tipo de cambio dramático que generalmente afecta la compatibilidad.
Para otras aplicaciones, es posible que desee utilizar simplemente un valor de fecha y hora en el estilo de formato estándar ISO 8601 (AAAAMMDDHHMM). Por ejemplo
201606070620
,. Ese orden de año-mes-fecha-hora-minuto representa un número cada vez mayor, siempre con la misma longitud debido al relleno cero, que cuando se ordena alfabéticamente también es cronológico.He utilizado con éxito este estilo de números de versión en una aplicación iOS de envío que funciona en iOS 7, 8 y 9.
Incluso puede automatizar la generación de este valor. En su proyecto de
Target
>Build Phases
>Run Script
Panel:Shell
campo:/bin/sh
Show environment variables in build log
casilla de verificación.Run script only when installing
casilla de verificación.Cada vez que realiza una compilación, se captura la fecha y hora actual en la zona horaria UTC . La
-u
bandera en el script hace uso de UTC en lugar de su zona horaria predeterminada actual. Generalmente, es mejor para los programadores y administradores de sistemas usar y pensar en UTC en lugar de en las zonas horarias locales.O haga un híbrido, con un convencional
1.2.3
para el número de versión y una fecha y hora como número de compilación. Para hacer el híbrido, simplemente comente laCFBundleShortVersionString
línea con un#
frente.fuente
El esquema más sensato para mí es usar el número de versión (es decir,
CFBundleShortVersionString
) para el número de versión real, y luego usar el número de compilación (es decirCFBundleVersion
) para representar el envío a la App Store. Entonces, a menos que haya algún problema y, por lo tanto, se vuelva a enviar, este número es siempre 1. Para una nueva versión, lo restablezco a 1 si la anterior tuvo problemas en las pruebas de TestFlight o en la revisión.De la nota técnica TN2420: números de versión y números de compilación .
fuente
Utilizo CFBundleVersion para indicar la compilación interna de CFBundleShortVersionString . Utilizo el vuelo de prueba para enviar compilaciones para mis probadores, por lo que la diferencia entre ellas ha sido extremadamente útil.
Los documentos de Apple dicen que CFBundleVersion "debería ser una cadena compuesta por 3 enteros separados por puntos no negativos", pero en realidad puede ser MÁS DE puntos 3 partes (como muestra la respuesta anterior). Lo uso para indicar mi compilación de desarrollo, digamos que mi CFBundleShortVersionString es 1.0.0, puedo usar 1.0.0.11 para CFBundleVersion para indicar que es mi undécima compilación para la versión 1.0.0
Cada CFBundleVersion enviada a la tienda de aplicaciones debe ser más grande que antes o obtendrá el ERROR ITMS-90478 : "Versión no válida . La compilación con la versión“ xxx ”no se puede importar porque se ha cerrado una versión posterior para envíos de nuevas compilaciones. Elija un número de versión diferente ".
CFBundleShortVersionString solo puede tener 3 partes o obtendrá ERROR ITMS-90060: El valor de la clave CFBundleShortVersionString 'xxx' en el archivo Info.plist debe ser una lista separada por puntos de como máximo tres enteros no negativos ".
El tercer número que mencionó Basil Bourque, es decir, el número de versión que se muestra en iTunesConnect es donde las cosas pueden complicarse.
Utilizo un número de iTunesConnect diferente al de CFBundleShortVersionString porque cuando envié mi aplicación por primera vez a la tienda de aplicaciones ya tenemos muchas rondas de lanzamientos internos. Así que usé 1.0 para el número de iTunesConnect y 5.x para CFBundleShortVersionString. En la próxima versión de la tienda de aplicaciones, proporcioné una función para verificar si hay una versión más nueva en la tienda de aplicaciones y me di cuenta de que ahora tenía problemas porque solo puedo obtener el número de iTunesConnect (usando
http://itunes.apple.com/lookup?bundleId=
), por lo que necesito hacer algunos cálculos antes de compararlo. con el número CFBundleShortVersionString.Traté de arreglar eso usando el número de iTunesConnect como mi CFBundleShortVersionString, pero recibí el error ERROR ITMS-90062 : "Este paquete no es válido. El valor de la clave CFBundleShortVersionString [xxx] en el archivo Info.plist debe contener una versión superior a esa de la versión aprobada previamente [xxx] ".
Así que te sugeriré que siempre los hagas iguales.
fuente
Algo que nunca he visto discutido en ninguna parte es ¿cuál es el número máximo para cada campo en una CFBundleVersion?
Al establecer CFBundleVersion en una aplicación en 1.1.1 y observar el valor hexadecimal de la versión en "lsregister -dump", determiné que el valor máximo para el primer campo es (2 ^ 22) -1 o 4194303, y el máximo los valores para el segundo y tercer campo son (2 ^ 21) -1 o 2097151.
Los 3 campos suman 64 bits.
Esto tiene implicaciones para aquellos de nosotros que usamos CFBundleVersion según la fecha y la hora.
Estaba configurando el primer campo en YYYYMMDD. Esto siempre es mayor que el número máximo de versiones permitidas y conducía a resultados impredecibles, por decir lo menos, cuando Launch Services estaba decidiendo qué versión de una aplicación ejecutar cuando tenía varias versiones instaladas y estaba usando algo como 'open -a Appname 'desde la línea de comando.
Por favor difunda esto ampliamente. Estoy seguro de que mucha gente se está despejando de esto.
fuente
A partir de ahora, la documentación de Apple para los
CFBundleVersion
estados [énfasis mío]:Para
CFBundleShortVersionString
[énfasis mío]:Sugeriría
CFBundleVersion
aumentar automáticamente para cada compilación (o cada lanzamiento de TestFlight) y restablecerlo a 0 cada vez que cambieCFBundleShortVersionString
.Debe planificar explícitamente, o idear un medio coherente, para actualizar la versión visible del usuario en
CFBundleShortVersionString
.fuente