Los campos de versión / compilación para una aplicación 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 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.
"Build" 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.
"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 / compilación se deben incrementar cuando se carga una nueva versión de la aplicación en iTunes Connect y / o se lanza a la App Store?
¿Puede la "versión" CFBundleShortVersionString
o la "compilación" CFBundleVersion
permanecer igual entre las actualizaciones de la aplicación?
Puntos adicionales para las fuentes de Apple o los mensajes de error exactos que iTunesConnect muestra al cargar una versión / número de compilación no válido.
Nota de Android / Google Play:
La discusión que suscita esta pregunta es que la "versión" pública de una aplicación de Android en Google Play Store no necesita incrementarse y no está validada de ninguna manera . El android:versionName
puede seguir siendo el mismo entre los lanzamientos, mejorar, reducir, 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 versión de lanzamiento del código de la aplicación, como se debe mostrar a los usuarios.El valor es una cadena para que pueda describir la versión de la aplicación como una
<major>.<minor>.<point>
cadena o como cualquier otro tipo de identificador de versión absoluta o relativa.
Diferencia entre versionName y versionNumber en Android
Mientras que android:versionCode
se obliga a que sea un entero que se incrementa en el lanzamiento.
Documentación de Apple
Como se señaló en la respuesta recientemente aceptada , Apple ha publicado recientemente una Nota técnica que detalla su esquema de número de versión y compilación:
Nota técnica de Apple TN2420 - Números de versión y números de compilación
Respuestas:
Nota técnica de Apple TN2420, números de versión y números de compilación
Resumen:
Version
,Build number
) debe ser único.Version
( CFBundleShortVersionString ) debe estar en orden secuencial ascendente.Build number
( CFBundleVersion ) debe estar en orden secuencial ascendente.Según la lista de verificación, la siguiente
(Version, Build Number)
secuencia también es válida.Caso: reutilización
Build Number
en diferentes trenes de liberación. (NOTA: NO es la aplicación macOS)(1.0.0, 1) -> (1.0.0, 2) -> ... -> (1.0.0, 11) -> ( 1.0.1 , 1 ) -> (1.0.1, 2)
fuente
(major, minor, patch)
estilo. Y había usado 4 componentes antes, pero la App Store no acepta ese formato con 4 componentes.El
CFBundleShortVersionString
debe coincidir con el número de versión que da iTunes Connect. También es el número de versión que aparece cuando el usuario mira su aplicación en la App Store.No
CFBundleVersion
se muestra en la App Store, pero iTunes lo utiliza para determinar cuándo se ha actualizado su aplicación.Respondiendo a sus preguntas de manera más específica ...
Ambos. Uno se muestra en la App Store, el otro lo usa iTunes para actualizar 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á saberlo). Si lo intenta, verá mensajes de error como los siguientes:
Si. Usando el estándar semver.org .
No.
fuente
CFBundleShortVersionString
. es posible? Quiero rechazar mi propia aplicación.CFBundleShortVersionString es el "nombre" público de la versión (ejemplo: "2.5" o "3.8.1"). Debe aumentarlo en cada lanzamiento .
CFBundleVersion es el número de compilación privado . No se ve en la AppStore. Debe aumentarlo en cada carga . Significa que si alguna vez rechaza un binario antes de que se conecte y desea cargar un nuevo binario, tendrá el mismo CFBundleShortVersionString pero debe tener un CFBundleVersion más alto (ejemplo: público "2.5", privado "2.5", y luego rechazo binario, y vuelva a cargar privado "2.5.1")
Editar el 16 de noviembre de 2016:
/ ! \ La propiedad CFBundleVersion también se usa (junto con CFBundleName ) en el
User-Agent
encabezado 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).
fuente
X.X-rc2
aX.X.2
, para el sistema de CI para generar elbuildNumber
para subir a iTunesConnect.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ía encontrarlos en su -info.plist.
Cuando intenta validar la aplicación en el organizador, arrojará un error si alguno de ellos no se ha incrementado. Me pasó anoche.
fuente
Ambos
CFBundleVersion
yCFBundleShortVersionString
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.
Esta pregunta incluye la captura de pantalla anterior del validador de Xcode Organizer que se niega a validar la aplicación cuando
CFBundleVersion
yCFBundleShortVersionString
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 anteriormente [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 prueba que una de las cadenas debe coincidir con la versión de la aplicación creada en iTunes Connect.
fuente
La nota técnica actual de Apple TN2420, números de versión y números de compilación dice (mi negrita):
Desafortunadamente, esto significa que no puede reutilizar un número de compilación que rastrea el número de tren de lanzamiento en iOS cuando está intentando lanzar la misma compilación en Mac Catalyst.
En mi caso, por ejemplo, debido a algunos problemas anteriores, terminé lanzando 1.0.2 (4) como una aplicación Mac Catalyst que correspondía a 1.0.2 (1) en iOS. Ahora, al intentar lanzar 1.0.3 (1) en ambos, la aplicación falla la verificación en MacOS debido al número de compilación, mientras pasa la verificación en iOS.
Supongo que ahora que estoy lanzando la misma aplicación en iOS y MacOS de forma rutinaria, adoptaré números de compilación que correspondan a la fecha, como 20200111 y los incrementaré con un punto decimal si necesito cambiar el número de compilación dentro de una versión determinada.
fuente
Necesitas 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
CFBundleShortVersionString
que debe incrementarse.Si actualiza la versión pero se olvida de incrementar la
CFBundleVersion
, encontrará un error durante la carga. Vea la respuesta y la captura de pantalla de pkamb.Para obtener detalles sobre
CFBundleShortVersionString
yCFBundleVersion
, consulte: https://stackoverflow.com/a/31921249/936957fuente
Puedo confirmar, habiéndolo probado en ambos sentidos, que una secuencia de versiones y números de compilación como ...
... será aceptado para aplicaciones de iOS, pero para aplicaciones de Mac (Catalyst) devuelve este error:
La versión de Mac y los números de compilación deberían ser como ...
Para iOS, solía ingresar números de compilación como el número de versión más un cuarto dígito, como ...
... pero eso tampoco está permitido para las aplicaciones de Mac. Cuando intenté enviar mi primera aplicación Mac (Catalyst), Apple solo aceptaba un número de compilación con tres o menos dígitos:
Así que cambié a un solo número que se incrementa para cada compilación y continúa incrementándose en los números de versión.
fuente
Me estoy preparando para lanzar una nueva aplicación de Mac App Store. Usando el formato CalVer de
YEAR.release (build)
.He subido varias construcciones:
2020.0 (1)
,2020.0 (2)
, etc., finalmente presenté2020.0 (8)
para la App Store Review. Que pasó la revisión y está en el estado Pendiente de lanzamiento para desarrolladores .Quería arreglar algunas cosas antes del lanzamiento, así que agregué una nueva compilación al mismo tren de lanzamiento:
2020.0 (9)
.Eso resulta en el error:
lo cual es molesto ya que mi
2020.0
versión nunca fue lanzada . A partir de la respuesta aceptada a esta pregunta, tenía la impresión de que hasta que la aplicación estuviera disponible en la App Store, podría continuar lanzando nuevas compilaciones con la misma versión.La solución parece ser que un "tren de lanzamiento" (Misma versión + Nueva compilación) no se puede actualizar si el estado de la aplicación es Lanzamiento de desarrollador pendiente . Publica tu compilación existente y luego aumenta la versión, o cancela esta versión en App Store Connect para permitir más cargas para este tren de versiones.
fuente
AFAIK, fuera de mi cabeza, solo necesitas aumentar el número de compilación
CFBundleVersion
. Incrementar la cadena de la versión corta no es necesariamente necesario, aunque probablemente debería incrementarlo, ya que le dice al usuario que la aplicación es nueva. Sin embargo, Apple dice que la numeración debe seguir las convenciones tradicionales de versiones de software, y iTunes Connect puede quejarse si intenta volver a cargar una versión ya existente.En pocas palabras, puede funcionar, pero probablemente no.
fuente
CFBundleShortVersionString
no es necesario incrementarlo, la "misma" versión para el usuario se puede cargar en la App Store varias veces.