2011-08-16 7 views
7

No quiero que una compilación de archivo tenga éxito a menos que mi directorio de trabajo esté limpio. Por lo tanto, quiero añadir un "Run Script" fase de construcción (o algo similar) para mi proyecto Xcode tal que:¿Cómo puedo detener una compilación de Xcode Archive si mi copia de trabajo de git está sucia?

SI estoy realizando una acumulación Archivo ...

Y hay cambios no confirmados en mi directorio fuente

THEN la compilación falla con un error.

Estoy trabajando con Xcode 4 y git 1.7.

¿Qué es un script bueno, conciso y reutilizable que hará el trabajo?

Respuesta

9

Aquí está el script que he llegado con:

#!/bin/sh 
if [ -z "$(git status --porcelain)" ]; then 
    TAG=`date +xcarchive-%Y%m%d-%H%M%S` 
    echo "Working directory clean, creating tag ${TAG}" 
    git tag -a -m "Xcode Archive created" ${TAG} 
    exit 0 
else 
    echo "error: Working directory dirty, stopping build" 
    exit 1 
fi 

Como beneficio adicional, se crea una etiqueta, si la copia de trabajo está limpia.

El cheque limpio/sucio se basa en this question (que olvidé que había propuesto una respuesta).

Si no desea crear una etiqueta, elimine la línea git tag.

Si no desea detener la creación, elimine la línea exit 1.

Para instalar esta en un proyecto:

  1. poner esto en un archivo en el directorio del proyecto (lo llamé ArchiveHousekeeper.sh) y asegúrese de que el bit de ejecución se establece (chmod +x)
  2. en su proyecto Xcode , añadir un nuevo objetivo "Build System externo"
    • Nombre: "Archivo de ama de casa" (o lo que quieras)
    • Herramienta de construcción: ./ArchiveHousekeeper.sh
  3. En el menú de Xcode, seleccionar Producto -> Editar Esquema ...
  4. En la sección Generar, añadir el nuevo objetivo, a continuación, desactive todas las casillas excepto la de la columna de Archivo. Esto garantiza que el script solo se ejecutará en Archive. (Consulte this question para obtener una explicación y una buena captura de pantalla.)
  5. Ahora intente crear un archivo y verlo fallar porque no ha registrado estos cambios.

Sería bueno si las acciones previas y posteriores a Xcode 4 se pudieran utilizar para esto (por lo que no es necesario crear un objetivo "falso"), pero no parecen poder afectar el construir, y también no tengo idea en qué directorio se ejecutan, qué variables de entorno están disponibles, o dónde va su salida.

+0

Gracias! Me llevó bastante tiempo descubrir cómo [agregar un nuevo objetivo] (http://stackoverflow.com/a/10407469/2547229). – Benjohn

+0

Tengo muchas ganas de usar la configuración de compilación en el script; básicamente quiero el [nombre de compilación, versión y número de compilación en la etiqueta] (http://stackoverflow.com/q/27326469/2547229). ¿Estas variables no parecen darse al script usando este enfoque? – Benjohn

+0

En Xcode 8.3.2, agregue un objetivo de "Sistema de compilación externo" a través de Archivo> Nuevo> Destino ...> Plataforma cruzada> Sistema de compilación externo. –

Cuestiones relacionadas