He estado usando un script de shell como parte de mi proceso de compilación de Xcode para incrementar el número de compilación dentro del archivo plist , sin embargo, hace que Xcode 4.2.1 se bloquee con frecuencia (con un error sobre el objetivo que no pertenece a un proyecto; supongo El cambio del archivo plist confunde Xcode de alguna manera).
El script de shell hizo esto para que el número de compilación solo se incremente agvtool
cuando un archivo es más nuevo que el archivo plist (por lo que solo la construcción no incrementó el valor):
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi
¿Hay alguna manera de incrementar el número de compilación (en el archivo plist o en cualquier otro lugar) que no rompa Xcode?
EDICIÓN FINAL : ahora hago este tipo de cosas usando un script de Python que acabo de hacer público en github . No está bien documentado, pero no debería ser difícil de resolver. Como beneficio adicional, este repositorio también contiene una secuencia de comandos útil para agrupar automáticamente la biblioteca de terceros en un paquete de aplicaciones.
Respuestas:
Si entiendo su pregunta correctamente, ¿desea modificar el
Project-Info.plist
archivo, que es parte de la plantilla de proyecto estándar de Xcode?La razón por la que pregunto esto es que
Project-Info.plist
normalmente está bajo control de versión, y modificarlo significa que se marcará como, bueno, modificado.Si eso está bien con usted, entonces el siguiente fragmento actualizará el número de compilación y marcará el archivo como modificado en el proceso, donde
get_build_number
hay algún script (es decir, un marcador de posición en este ejemplo) para obtener el número de compilación (posiblemente incrementado) que quiere usar:PlistBuddy le permite configurar cualquier clave en un archivo plist, no solo el número de versión. Puede crear todos los archivos plist que desee e incluirlos en los recursos si es necesario. Luego se pueden leer desde el paquete.
En cuanto a su necesidad de mostrar la versión en el panel Acerca de y otros lugares, también puede consultar la configuración
CFBundleGetInfoString
yCFBundleShortVersionString
.fuente
agvtool
), sin embargo, el acto de modificar el plist durante la construcción rompe Xcode con frecuencia (ya que al eliminar el script no ha funcionado) se bloqueó una vez, cuando se bloqueaba cada 3 compilaciones más o menos). ¿Es posible poner la información de la versión en otro archivo plist y tenerla incluida con el paquete y accesible desde la aplicación?get_build_number
es solo un marcador de posición: se actualizó la respuesta para aclarar.He jugado muchas de las respuestas a esta pregunta, y ninguna de ellas me satisfizo. Sin embargo, finalmente se me ocurrió una mezcla que realmente me gusta.
Hay dos pasos, uno al principio y otro al final de las fases de construcción.
Al principio:
Al final:
Al mirar Info.plist en Xcode, verá que el número de versión es "DESARROLLO", pero la aplicación desarrollada tendrá un número de compilación en constante aumento. (Siempre y cuando siempre hagas tus compilaciones desde la misma rama).
Establecer el número de versión nuevamente en una cadena constante al final evita que el archivo Info.plist se cambie al compilar la aplicación.
Por qué me gusta este método:
fuente
git rev-list --count HEAD
lugar degit rev-list HEAD | wc -l | tr -d ' '
.fastlane
para cargar compilaciones automáticas de esta manera, obtienes: ERROR ITMS-90058: "Este paquete no es válido. El valor de la clave CFBundleVersion [DESARROLLO] en el archivo Info.plist debe ser una lista separada por puntos de la mayoría de los tres enteros no negativos ".He usado esta lista. Funciona como se esperaba. https://gist.github.com/sekati/3172554 (todo el crédito va al autor original)
Scripts que modifiqué con el tiempo.
xcode-versionString-generator.sh ,
xcode-build-number-generator.sh
Como estos aspectos esenciales están ayudando a la comunidad de desarrolladores, hice que el proyecto GitHub fuera de él. Así que desarrollémoslo bien. Aquí está el proyecto GitHub: https://github.com/alokc83/Xcode-build-and-version-generator
He actualizado el código para ambas secuencias de comandos un poco de mejora. en lugar de usar a continuación, tome lo último de GitHub
Para la versión:
Para construir:
fuente
Toda esta entrada fue extremadamente útil. Utilicé este truco pero configuré mi script como un enlace posterior a la confirmación en GIT, por lo que CFBundleVersion se incrementa después de cada confirmación exitosa. El script de gancho va en .git / hooks. Se deja un registro en el directorio del proyecto.
Esto cumple con mi criterio más básico. Quiero poder extraer una versión de GIT y reconstruir la compilación exacta que tenía anteriormente. Cualquier incremento realizado durante el proceso de compilación no hace esto.
Aquí está mi guión:
fuente
bump_build_number.sh
script desde su creación.No sé cuál es la mejor, pero publicaré la respuesta de Apple en caso de que alguien la esté buscando ...
De acuerdo con esta publicación de preguntas y respuestas de Apple :
Automatización de versiones y números de compilación utilizando agvtool
Las teclas de versión y número de compilación especifican respectivamente las versiones de marketing e internas de su aplicación. agvtool es una herramienta de línea de comandos que le permite incrementar automáticamente estos números al siguiente número más alto o a un número específico.
El número de compilación identifica una versión inédita o lanzada de su aplicación. Se almacena en la lista de información de su aplicación como
CFBundleVersion
(versión de paquete).Debe completar los siguientes pasos en su proyecto Xcode:
Navegue hasta el panel Configuración de compilación de su destino, luego actualícelo para todas sus configuraciones de compilación de la siguiente manera:
Su archivo de datos del proyecto Xcode, project.pbxproj, incluye una
CURRENT_PROJECT_VERSION
configuración de compilación (Versión actual del proyecto), que especifica la versión actual de su proyecto. agvtool busca project.pbxproj paraCURRENT_PROJECT_VERSION
. Continúa ejecutándose siCURRENT_PROJECT_VERSION
existe y deja de ejecutarse, de lo contrario. Su valor se utiliza para actualizar el número de compilación.Por defecto, Xcode no utiliza ningún sistema de versiones. Establecer el sistema de control de versiones en Apple Generic garantiza que Xcode incluirá toda la información de versión generada por agvtool en su proyecto.
agvtool busca en la lista Info.plist de su aplicación su versión y números de compilación. Los actualiza si existen y no hace nada, de lo contrario. Asegúrese de que las teclas
CFBundleVersion
(Versión de paquete) yCFBundleShortVersionString
(Cadena de versiones de paquete, abreviadas) existan en su Lista de información como se ve en la imagen a continuación:Salga de Xcode, luego navegue al directorio que contiene su archivo de proyecto .xcodeproj en la aplicación Terminal antes de ejecutar cualquiera de los siguientes comandos. El archivo de proyecto .xcodeproj contiene project.pbxproj, que es utilizado por agvtool. (Esta es la parte que puede ejecutar en un script en lugar de la línea de comando).
Actualización del número de versión
Para actualizar el número de versión a una versión específica, ejecute
Ejemplo: actualice el número de versión a 2.0
Actualización del número de compilación
Para incrementar automáticamente su número de compilación, ejecute
Para establecer el número de compilación de su aplicación en una versión específica, ejecute
Ejemplo: establezca el número de compilación en 2.6.9
Prima:
Para ver el número de versión actual, ejecute
Para ver el número de compilación actual, ejecute
fuente
FWIW: esto es lo que estoy usando actualmente para aumentar el número de compilación solo para las versiones de lanzamiento (que incluye el archivado). Funciona bien bajo Xcode 5.1.
Simplemente copie / pegue el fragmento en una fase de compilación del script de ejecución directamente en Xcode:
fuente
Gracias por el guion. Funciona muy bien
Mi Info.plist está en un subdirectorio con un nombre que contiene espacios, así que tuve que modificar el script de ejecución con comillas alrededor de la ruta de plist:
y el script de shell de la misma manera con comillas alrededor de todas las rutas:
fuente
El guión que estoy usando actualmente está muy basado en Alix , arriba. Mi adaptación, a continuación, agrega una verificación para hacer solo el incremento automático en una versión / archivo de compilación.
Sin ese cambio, habrá conflictos de control de versión ya que cada desarrollador incrementará el número de compilación a su propio ritmo. Y el hecho de que el historial de git se contaminaría innecesariamente con el número de compilación cambiando todo el tiempo.
También está disponible (en un formato un poco más fácil de copiar y pegar) como una esencia de GitHub .
fuente
Recomendaría el uso de autorrevisión .
Xcode permite un archivo de encabezado (que se puede generar automáticamente en el momento de la compilación y no en las vcs) para proporcionar valores que se expandirán en info.plist en el momento de la compilación. Puede encontrar un tutorial para configurar esto en el sitio web de revisión automática .
La revisión automática tiene un tipo de salida orientado a estos tipos de archivos de encabezado para ayudar exactamente en estas situaciones.
fuente
Autorevision
no parece topar un número de compilación, como se requiere?VCS_NUM
debería ser lo que está buscando ( veaautorevision.h
un ejemplo ).Un problema con algunas de estas soluciones es que Launch Services solo reconoce
cuatrocinco dígitos principales en la versión de paquete . Tengo un proyecto con un número de compilación que está en los miles, por lo que quería usar algunos de los dígitos menos significativos.Este script de Perl incrementa todos los Info.plists en el proyecto, no solo el del objetivo actual, por lo que todos los números de compilación permanecen en el bloque. También usa un dígito de parche y dos dígitos menores, por lo que la compilación 1234 recibe la versión 1.23.4. Lo uso como un comportamiento previo a la compilación, por lo que se aplica a todos los proyectos que construyo.
El guión es bastante fuerza bruta, pero funciona para mí.
fuente
Podrías usar las versiones genéricas de Apple . Básicamente, todo lo que tiene que hacer es llamar
agvtool next-version -all
desde el directorio que aloja su archivo .xcproj. Para obtener más detalles, consulte la url anterior.fuente
Sobre la base de la solución de Wil Gieseler , solo tenía un cambio que quería hacer. Su solución pone el recuento de git commits en el número de compilación. Útil, pero sigue siendo un poco difícil encontrar la confirmación real que creó esa compilación. No me importaba demasiado si el número de compilación aumentaba monotónicamente, por lo que eliminé ese requisito para poder acceder más fácilmente a la confirmación que generó un binario dado.
Con ese fin, modifiqué su primer script a lo siguiente:
Esto convierte la versión corta del git SHA actual en decimal. Los caracteres hexadecimales no funcionan bien con los requisitos de número de compilación de Apple, por lo que tuve que hacer esto. Para volver a convertirlo, simplemente ejecuta algo como esto:
en bash, ¿dónde
<build number>
está el número de compilación que obtuviste de un binario? Luego, solo corregit checkout $SHA
y listo.Como se trata de una adaptación de la solución de Wil Gieseler , como se mencionó anteriormente, también necesitará el siguiente script posterior a la compilación:
que mantiene limpio tu historial de git.
fuente
Info.plist
que git rastrea?Intenté el procedimiento modificado y no funcionó porque: -
Xcode 4.2.1 cambia el subdirectorio xcuserdata en .xcodeproj
git observa el cambio anterior en Project-Info.plist
La siguiente modificación hace que se ignoren y solo marca cambios genuinos: -
fuente
Es posible que desee hacer esto solo cuando archiva (y carga a TF, por ejemplo). De lo contrario, su número de versión podría subir muy rápido.
En el esquema (Producto / Editar esquema / Archivar / Pre-acciones) puede agregar un script que se ejecutará solo cuando archiva.
Además, es posible que desee restablecer el número de compilación cada vez que incremente la versión de la aplicación.
Lo último, si usa el archivo en su lugar, puede deshabilitar de forma segura:
Como el número de compilación se incrementará solo cuando archives ...
EDITAR: corrija lo que dije, las acciones previas en el archivo ocurren después de la compilación (pero antes del archivo), por lo que el número de compilación se incrementará para el próximo archivo ... Pero puede crear un nuevo esquema y agregar esta acción en la compilación (pre acciones) de este nuevo esquema. y usa este esquema cuando quieras crear una nueva compilación
fuente
Yo uso la última revisión SVN para el número de compilación. Si cambia Info.plist en el directorio de compilación, no afectará la fuente Info.plist:
fuente
Siento que he encontrado a mi tribu. Tribu, espero que VersionX te divierta.
Hace una década, mientras trabajaba en un espacio de trabajo que tenía más de 25 proyectos de Xcode, aproveché la oportunidad para automatizar la versión y crear actualizaciones de cadenas en un grado que podría parecer absurdo, si solo mantiene uno o dos proyectos con actualizaciones ocasionales.
VersionX:
Fue divertido hacerlo. Aprendí mucho sobre el sistema de construcción Xcode.
Aquí hay un ejemplo del tipo de versión elegante y cadenas de compilación que VersionX podría generar automáticamente.
VersiónX 1.0.1 β7 (c5959a3 "Limpio")
Versión de marketing: VersiónX 1.0.1 β7 El "1.0.1 se deriva de la etiqueta para la confirmación, mientras que la" Beta 7 "se genera automáticamente por el recuento de confirmación o el recuento de compilación (por ejemplo).
Versión de compilación: (c5959a3 "Limpio") Muestra el hash de confirmación breve y le informa que el directorio de compilación no tuvo cambios no confirmados.
VersionX (fuente en GitHub): un sistema barroco para incrementar automáticamente la versión y crear cadenas en proyectos de Xcode.
La documentación de VersionX.
fuente
Es posible que desee ver una nueva herramienta que he estado desarrollando llamada Xcodebump. Puede manejar la actualización de CFBundleShortVersionString y CFBundleVersion. Como paso final, también registrará git y etiquetará el commit para que coincida con esos valores de CFBundle.
El proyecto Xcodebump se encuentra aquí:
https://github.com/markeissler/Xcodebump
fuente
Actualizo
build number
siguiendo el método.$INFO_FILE
es la ruta del archivo plist. Y$build_number
es un nuevo número de compilación para este edificio.En general, my
$build_number
está compuesto pormajor
yminor
partes. Elminor
proviene de la información del proyecto. Así que describo cómo generar lamajor
parte.Tengo 2 estrategias para decidir el
$build_number
.Primera estrategia
Esta estrategia utiliza el
git tag
recuento para decidir elmajor
debuild number
. Si hay53
etiquetas del proyecto, regresará53
siguiendo el script de shell.En general, está aumentando. Y obligará al desarrollador a poner una etiqueta git antes de publicar.
Segunda estrategia
Deje que el sistema Jenkins CI decida la
major
parte. Tiene una variable de entornoBUILD_NUMBER
. Está aumentando automáticamente cuando se construye en el sistema CI. Esta información es útil para rastrear el historial del proyecto en el sistema CI.fuente
Heres una versión actualizada. Esto funciona a partir de Xcode 9.3.1, iOS 11.
Haga clic en 'Crear fases' desde el objetivo de su aplicación, haga clic en el icono + para agregar un nuevo script de ejecución y, en el cuadro, pegue este código.
Vaya al archivo Info.plist y configure la 'Versión del paquete' en 1, y la 'Cadena de versiones del paquete, corta' en 1, debe estar configurado.
Cree el proyecto con Info.plist a la vista, y debería ver el cambio de la versión del paquete (número de compilación).
fuente
Aquí está mi solución. Si eres como yo: terminal amigable, como rubí, como versiones semánticas, prueba esto.
Haga un archivo llamado
Rakefile
que contenga esto:Preparar:
gem install xcodeproj versionomy
Ejecutar:
rake increment:major
orake increment:minor
orake increment:tiny
siempre que lo desee.fuente
Me resulta más conveniente utilizar la versión de automatización y los números de compilación utilizando agvtool .
Prueba esto:
<your_app_target>
El script (la primera línea es opcional):
fuente
Hagamos esto a la manera de Apple. Aumentará el número de compilación después de cada compilación exitosa
Te guiaré a través de 5 imágenes, solo hazlo.
Seleccione 'Editar esquema ...' en el menú desplegable, cuando seleccione el nombre de su proyecto ubicado en el lado derecho del botón Stop_build_button. Verificar primer paso
Desde el menú lateral izquierdo, expanda la opción 'Construir' y seleccione 'Acciones posteriores' Verifique el segundo paso
Aquí puede agregar sus códigos deseados (scripts) que desea ejecutar después de la compilación exitosa de su programa. Es el lugar donde tenemos que agregar una pequeña cantidad de código para que nuestra automatización funcione perfectamente. >> 1. seleccione el botón 'agregar (+)' de la esquina lateral izquierda para agregar un nuevo archivo de secuencia de comandos >> 2. Ahora, desde el menú desplegable, seleccione 'Nueva acción de ejecución de secuencia de comandos' Verifique el tercer paso
Tiene 3 campos >> 1. Shell ya está asignado para usted >> 2. ahora para 'Proporcionar configuraciones de compilación desde' Seleccione su nombre de proyecto. >> 3. Hay un gran campo para agregar su secuencia de comandos, simplemente copie y pegue este código allí: Marque el cuarto paso
PLIST = "$ {PROJECT_DIR} / $ {INFOPLIST_FILE}" PLB = / usr / libexec / PlistBuddy LAST_NUMBER = $ ($ PLB -c "Imprimir CFBundleVersion" "$ PLIST") NEW_VERSION = $ (($ LAST_NUMBER + 1)) $ PLB -c "Conjunto: CFBundleVersion $ NEW_VERSION" "$ PLIST"
Después de completar el cuarto paso, simplemente seleccione 'Cerrar' para cerrar la ventana y tenemos que hacer el último paso, vaya a su archivo 'plist.info' en el menú Archivo de proyecto y asegúrese de que la clave 'Versión de paquete' en la sección 'Clave' contenga más un control numérico del quinto paso
fuente