2011-02-24 9 views
6

En un proyecto C++ iOS (o cualquier otro sistema operativo Mac), ¿hay una manera simple de hacer que un valor esté disponible tanto para la configuración Info.pList como para el código en forma de una macro preprocesador?Valor Info.plist como C++ #define

Idealmente, me gustaría tener algo así como el código

C++:

#define MY_VERSION_STRING "1.0" 

info.plist

CFBundleVersion: ${MY_VERSION_STRING} 

O, alternativamente, hay una manera de conseguir los valores de la .pList en C++? (Sin analizar manualmente .pList como xml.)

+0

Xcode admite el preprocesamiento de Info.plist. – Richard

Respuesta

2

Probablemente no sea la mejor solución, pero podría usar la utilidad/usr/libexec/PlistBuddy en un script de compilación para generar un archivo .h que contenga una definición con un valor extraído del plist

Para dar salida a un valor de un plist:

/usr/libexec/PlistBuddy -c 'Print :Path:To:Key' filename.plist 
+0

Eso funcionará: puedo agregar un paso de prebuild para generar el archivo .h. ¡Aclamaciones! –

0

lista de propiedades también puede almacenar matrices o algunos datos binarios. ¿Cómo lo representas? Es muy específico del dominio. Entonces, si sabes exactamente cómo quieres que cada tipo se represente en C++, tienes que analizar el archivo plist y generar el código C++, ya sean las directivas del preprocesador o algún código que defina matrices, enumeraciones, etc. Hay herramientas disponibles PlistBuddy y plutil , pero probablemente no serán de mucha ayuda. La forma más fácil para mí sería usar perl, ver Using Perl to Manage Plist Files para más detalles.

¡Buena suerte!

0

En caso de que alguien quiere hacer la misma cosa, este es el guión añadí a la meta antes de la fase de compilación:

VERSION=`/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' Info.plist` 

echo "#define VERSION_STRING L\"$VERSION\"" > Version.h 
2

Sé que esto ya ha sido contestada, pero voy a añadir mis dos centavos para la posteridad. Como Richard mencionó anteriormente, Xcode tiene un par de opciones para preprocesamiento de archivos Info.plist: la más relevante para la pregunta actual es "Preprocess Info.plist" y "Info.plist Preprocessor Prefix File".

Si la información de su versión está definida en, digamos ver.h, puede incluir ver.h como el archivo de prefijo y consultar la macro de la versión directamente desde Info.plist.

1

Todo esto es posible sin involucrar a PlistBuddy en absoluto, utilizando completamente la configuración de compilación.

crea una configuración de construcción definida por el usuario para su proyecto/destino, ya sea en la interfaz de usuario Xcode o si está familiarizado con los archivos xcconfig, puede definirlo allí en una forma completamente textual =.

  1. crea su configuración MY_VERSION_STRING con un valor de 1.0 como su configuración de compilación en Xcode o en un archivo xcconfig.
  2. en su Info.plist su línea CFBundleVersion tendría un valor de $ {} MY_VERSION_STRING
  3. te calientan preprocesamiento Info.plist
  4. , por último, hacer uso de GCC_PREPROCESSOR_DEFINITIONS construir variable.para esa configuración de compilación puede especificar un valor de MY_VERSION_STRING = $ {MY_VERSION_STRING} que dará como resultado que su definición de configuración de compilación definida y compartida esté disponible en su código c/C++/obj-c como si la hubiera creado como #define
0

Si usa #define ..., debe usar la tecla .plist, MY_VERSION_STRING, y no $ {MY_VERSION_STRING}. Esto también funciona con el "Archivo Prefijo Preprocesador Info.plist". En ambos casos, no olvide configurar "Preprocess Info.plist File".