2011-10-30 19 views
15

Finalmente ... después de un par de años de observación y un mes de participación, tengo la oportunidad de hacerles una pregunta por mi cuenta.cómo hacer que XCode agregue fecha y hora de compilación al archivo Info.plist

Mi jefe no confía en mí (o en ningún proceso) para incrementar un número de compilación, también quiere tener una fecha de compilación & en la aplicación. Me gustaría poner esto en el archivo Info.plist habitual.

Me encontraron esta pregunta relacionada:

Build information in iOS Application (date/time app was built)

y en base a las respuestas allí, entré en el Editor de Esquema, y ​​añadió la escritura abajo a la sección de "Post-Acción" de la fase de construcción:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    defaults write "${infoplist%.plist}" BuildDate "${builddate}" 
fi 

en Xcode, mi ventana Esquema Editor es así:

Desafortunadamente, BuildDate nunca se escribe en Info.plist.

Cambiar "$ {builddate}" a "$ builddate" tampoco funciona. Agregué esta línea a la secuencia de comandos:

echo "build date is $builddate" > /tmp/result.txt 

y la fecha parecía perfectamente bien en el archivo escrito. Escribir cadenas en el archivo Info.plist del script anterior funciona perfectamente bien, lo suficientemente molesto.

Entonces, resumido, ¿cómo obtener la fecha para agregarse al archivo Info.plist?

+0

yo no tenía ningún problema al utilizar la script como una acción posterior, excepto que termina invalidando la firma. Parece funcionar bien como fase de construcción en lugar de una acción posterior, que también tiene el beneficio de funcionar tanto si comparte espacios de trabajo como si no. También funciona mejor que una acción previa, ya que una acción previa se vería bombardeada por cambios en el info.plist real que causa una sobrescritura del tiempo de compilación. – smparkes

Respuesta

4

El código en la respuesta de Michael es incorrecto o no está actualizado. La siguiente versión corrige un error en la sintaxis establecida y también admite rutas de compilación con espacios en ellas.

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

Nota: Este cambio fue presentado como una edición pero fue rechazado y que todavía no tienen la reputación suficiente para publicar un comentario en su respuesta ...

2

Estoy utilizando su código exacto, pero dentro de la acción previa en lugar de la acción posterior, y el info.plist dentro del producto construido informa correctamente la fecha de compilación. En otras palabras, tiene que personalizar su info.plist antes de copiarlo en el producto integrado, lo que me parece razonable.

Por cierto, gracias por la sugerencia, es bastante inteligente y útil.

+0

Si haces esto en una acción previa y luego realmente actualizas el info.plist, tus cambios serán bombardeados en la actualización. Puede que no importe mucho, ya que el info.plist no se actualiza tanto. – smparkes

5

Ahhhh, yo debería haber pasado otros 30 minutos (en la parte superior de las 2 horas ya había desperdiciado) y mirado las respuestas para este pregunta antes de la publicación de mi propia:

Insert Subversion revision number in Xcode

Este script posterior a la acción y hace el truco funciona para mí:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

Como se puede ver, se está haciendo un poco de un truco allí (añadiendo que si no existe; el establecimiento de hacerlo bien después).

Si alguien puede sugerir una solución utilizando el método "defaults write" anterior (que creo que podría ser mejor soportado que "PlistBuddy"), estaría encantado de averiguarlo (y por supuesto lo aceptaré y lo usaré) esa respuesta superior, también).

Cuestiones relacionadas