636 votos

Versión vs construcción en XCode 4

Tengo una aplicación que he desarrollado con XCode 3 y recientemente comenzó a editar con XCode 4. En el destino de resumen tengo el iOS de la aplicación de destino formulario con los campos: identificador de la versión, construir, dispositivos, y el despliegue de destino. El campo de versión es en blanco y la construcción del campo es 3.4.0 (que coincide con la versión de la app de cuando yo era todavía edición con XCode 3).

Mis preguntas son:

  1. ¿Cuál es la diferencia entre la versión y la compilación de los campos?

  2. ¿Por qué el campo de la versión en blanco después de actualizar a XCode 4?

Gracias.

1195voto

nekno Puntos 10556

Apple especie de reorganizan/reutilizados los campos.

Más adelante, si usted mira en la pestaña de Información para la Aplicación de Destino, debe utilizar el "Paquete de versiones de cadena corta" como su Versión (por ejemplo, 3.4.0) y el "Paquete de la versión de" como Construir (por ejemplo, 500 o 1A500). Si usted no los ve tanto, usted puede agregar. Aquellos que se asignan a la Versión correcta y Crear cuadros de texto en la ficha Resumen, que son los mismos valores.

Al ver la pestaña Información, si haces clic derecho y seleccione Show de Raw Claves/Valores, verás los nombres reales son CFBundleShortVersionString (Versión) y CFBundleVersion (Compilación).

La Versión es generalmente usado como parece que ha venido utilizando Xcode 3. No estoy seguro de en qué nivel estás preguntando acerca de la Versión/Build diferencia, así que voy a responder filosóficamente.

Hay todo tipo de regímenes, pero un popular es:

{MajorVersion}.{MinorVersion}.{Revisión}

  • Versión principal - Grandes cambios, remodelaciones y funcionalidad cambios
  • Versión secundaria de Menores de edad, mejoras, adiciones a la funcionalidad de
  • Revisión - Un número de revisión de los fallos

A continuación, la construcción se utiliza por separado para indicar el número total de generaciones para un lanzamiento o para toda la vida útil del producto.

Muchos desarrolladores de inicio el número de Compilación a 0, y cada vez que construir aumentan el número uno, el aumento de siempre. En mis proyectos, tengo un script que automáticamente aumenta el número de compilación cada vez que voy a construir. Vea las instrucciones para la de abajo.

  • Versión 1.0.0 podría ser construir 542. Tomó 542 construye para llegar a un 1.0.0 versión.
  • Versión 1.0.1 podría ser construir 578.
  • Versión 1.1.0 podría ser construir 694.
  • Release 2.0.0 podría ser build 949.

Otros desarrolladores, como Apple, tienen un número de versión de Compilación consta de una versión mayor + menor de la versión + número de generaciones para la liberación. Estos son los verdaderos números de versión de software, como contraposición a los valores utilizados para la comercialización.

Si usted va a Xcode menú > Acerca de Xcode, podrás ver la Versión y la Compilación de los números. Si usted golpea el Más Info... botón verás un montón de versiones diferentes. Desde la Más Info... botón fue eliminado en Xcode 5, esta información también está disponible en el Software > Programador de la sección del Sistema de Información de la aplicación, disponible por la apertura de Apple menú > Acerca de Este Mac > Informe de Sistema....

Por ejemplo, Xcode 4.2 (4C139). La comercialización de la versión 4.2 es la construcción de las grandes versión 4, Construir menor de la versión C, y el número de Compilación 139. La próxima versión (presumiblemente 4.3) es muy probable que se Construya la liberación de la 4D, y el número de Compilación volverá a empezar en el 0 y el incremento de allí.

El iPhone Simulator Versión/Build números son de la misma manera, como son los iPhones, Macs, etc.

  • 3.2: (7W367a)
  • 4.0 de: (8A400)
  • 4.1: (8B117)
  • 4.2: (8C134)
  • 4.3: (8H7)

Actualización: Por petición, aquí están los pasos para crear una secuencia de comandos que se ejecuta cada vez que se crea la aplicación en Xcode para leer el número de Compilación, incremento, y escribir en la app {App}-Info.plist archivo. No son opcionales, pasos adicionales si desea escribir su versión y de compilación de números a la Settings.bundle/Root*.plist archivo(s).

Esta se extiende desde el artículo aquí.

En Xcode 4.2 - 5.0:

  1. De carga de su proyecto de Xcode.
  2. En el panel izquierdo, haga clic en su proyecto en la parte superior de la jerarquía. Para cargar el editor de valores del proyecto.
  3. En el lado izquierdo de la ventana del centro de panel, haga clic en su aplicación, en virtud de los OBJETIVOS de partida. Usted necesitará para configurar esta configuración para cada objetivo del proyecto.
  4. Seleccione la construcción de las Fases ficha.
    • En Xcode 4, en la parte inferior derecha, haga clic en el Agregar la Fase de construcción botón y seleccione Agregar a Ejecutar el Script.
    • En Xcode 5, seleccione Editor de menú > Añadir Fase de construcción > Agregar Ejecutar la secuencia de Comandos Fase de construcción.
  5. Arrastrar-y-soltar el nuevo Ejecutar la secuencia de Comandos de fase para moverlo a justo antes de la Copia Paquete de Recursos de fase (cuando la aplicación-archivo info.plist será incluido con la aplicación).
  6. En el nuevo Guión de Ejecución de la fase, el conjunto de Concha: /bin/bash.
  7. Copie y pegue el siguiente en la secuencia de comandos de área para la generación de números enteros:

    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
    buildNumber=$(($buildNumber + 1))
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
    

    Como @Bdebeez señalado, el Apple Genérico de control de Versiones de la Herramienta (agvtool) también está disponible. Si prefieres usar en su lugar, hay un par de cosas para cambiar la primera:

    • Seleccione la Configuración de generación ficha.
    • Bajo el control de Versiones de la sección, establezca el Proyecto Actual Versión a la construcción inicial número que desea utilizar, por ejemplo, 1.
    • De vuelta en la construcción de las Fases de la ficha, arrastrar y soltar tus Ejecutar la secuencia de Comandos de fase después de la Copia de Paquete de Recursos de fase para evitar una condición de carrera cuando tratando de construir y actualizar el archivo de origen que incluye su número de compilación.

    Tenga en cuenta que con el agvtool método puede todavía periódicamente obtener failed/cancelado construye sin errores. Por esta razón, no recomiendo usar agvtool con este script.

    Sin embargo, en sus Ejecutar la secuencia de Comandos de fase, puede utilizar la siguiente secuencia de comandos:

    "${DEVELOPER_BIN_DIR}/agvtool" next-version -all
    

    La next-version argumento incrementa el número de compilación (bump también es un alias para la misma cosa), y -all actualizaciones Info.plist con el nuevo número de compilación.

  8. Y si tiene una Configuración de paquete donde se muestra la Versión y la Compilación, usted puede agregar lo siguiente al final de la secuencia de comandos para actualizar la versión y la compilación. Nota: el Cambio de PreferenceSpecifiers valores para que coincida con su configuración. PreferenceSpecifiers:2 significa mirar el tema en el índice 2 bajo PreferenceSpecifiers matriz en el archivo plist, por lo que para un índice basado en 0, que es la 3ª opción de preferencia en la matriz.

    productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    

    Si usted está utilizando agvtool en lugar de la lectura de la Info.plist directamente, puede agregar la siguiente secuencia de comandos en su lugar:

    buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse)
    productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1)
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
    
  9. Y si usted tiene una aplicación universal para iPad y iPhone, entonces usted también puede definir los ajustes del iPhone archivo:

    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist    
    /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist
    

71voto

Yar Puntos 25421

Dejando esto para mi propia referencia. Esto mostrará la versión y construir para la "versión" y "construir" los campos que ves en un objetivo de XCode:

- (NSString*) version {
    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    return [NSString stringWithFormat:@"%@ build %@", version, build];
}

Nota: Código modificado para ser ARC y retener liberación agradable gracias al comentario de @nekno.

51voto

Bdebeez Puntos 2066

El número de Compilación es un número interno que indica el estado actual de la aplicación. Se difiere el número de Versión en la que normalmente el usuario no se enfrentan y que no denota ninguna diferencia/características/mejoras como un número de versión haría normalmente.

Piense en ello de esta manera:

  • Construir (CFBundleVersion): El número de versión de compilación. Generalmente se inicia este 1 y aumentará en 1 con cada generación de la aplicación. Rápidamente se permite comparaciones de que construir es más reciente y se indica el sentido de avance de la base de código. Estos pueden ser abrumadoramente valioso cuando se trabaja con control de calidad y que necesitan para asegurarse de que los insectos se registra contra el derecho se basa.
  • La comercialización de la Versión (CFBundleShortVersionString): El usuario se enfrenta número que se utiliza para denotar esta versión de su aplicación. Generalmente esto se sigue una Major.minor versión de esquema (por ejemplo, MyAwesomeApp 1.2) para que los usuarios sepan a qué versiones son más pequeñas actualizaciones de mantenimiento y que son la gran cosa nuevas características.

Para utilizar esta forma en sus proyectos, Apple ofrece una gran herramienta llamada agvtool. Yo recomiendo el uso de este, ya que es MUCHO más sencillo de lo que scripting hasta plist cambios. Permite configurar fácilmente tanto el número de generación y la comercialización de la versión. Es particularmente útil cuando las secuencias de comandos (por ejemplo, la facilidad de actualizar el número de compilación en cada generación, o incluso consultar lo que el actual número de compilación). Incluso puede hacer más cosas exóticas como la etiqueta de su SVN para que al actualizar el número de compilación.

Para utilizarlo:

  • Establecer su proyecto en Xcode, bajo el control de Versiones, para el uso de "Apple Genérico".
  • En la terminal
    • agvtool new-version 1 (establecer el número de Compilación de 1)
    • agvtool new-marketing-version 1.0 (conjunto de la Comercialización de la versión 1.0)

Consulte la página man de agvtool para un montón de buena información

25voto

ale84 Puntos 501

El script autoincrement el número de compilación en la respuesta anterior no funcionó para mí si el número de compilación es flotante y un punto de valor, así que he modificado un poco:

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=`echo $buildNumber +1|bc`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

21voto

Viktor Lexington Puntos 3068

El marketing número de versión es para los clientes, llamado número de versión. Se inicia con 1.0 y sube por las actualizaciones mayores a 2.0, 3.0, para las actualizaciones de menor importancia a 1.1, 1.2 y para correcciones de errores de la versión 1.0.1, 1.0.2 . Este número está orientado sobre lanzamientos y novedades.

El número de compilación es principalmente el interno número de generaciones que se han realizado hasta entonces. Pero algunos otros números como el número de la sucursal del repositorio. Este número debe ser único para distinguir los diferentes casi el mismo construye.

Como se puede ver, el número de compilación no es necesario y es hasta que el número de compilación que desea utilizar. Así que si usted actualiza su Xcode a una versión principal, la acumulación de campo está vacío. La versión de campo no puede estar vacía!.


Para obtener la build número NSString variable:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

Para obtener la versión número NSString variable:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

Si desea que tanto en uno NSString:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

Esto es probado con la Versión de Xcode 4.6.3 (4H1503). El número de compilación a menudo se escribe en el paréntesis / llaves. El número de compilación es en hexadecimal o decimal.

buildandversion


En Xcode se puede auto-incrementar el número de compilación como un número decimal por la colocación de los siguientes en Run script fase de construcción en la configuración del proyecto

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

Para hexadecimal número de compilación utilizar esta secuencia de comandos

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber)) 
buildNumber=$(($buildNumber + 1)) 
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

project_settings

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X