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:
- 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
)
- 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
- En el menú de Xcode, seleccionar Producto -> Editar Esquema ...
- 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.)
- 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.
Gracias! Me llevó bastante tiempo descubrir cómo [agregar un nuevo objetivo] (http://stackoverflow.com/a/10407469/2547229). – Benjohn
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
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. –