2009-07-10 8 views
5

Pregunta acerca de las mejores prácticas.Configuración de compilación de iPhone Funciones de habilitación

¿Hay alguna forma de detectar mediante programación si la aplicación se está compilando para una configuración AdHoc y, de ser así, habilitar una característica en la aplicación?

Por ejemplo, estoy pensando en habilitar un cambio entre los entornos beta y prod dado dependiendo de si la aplicación es una configuración AdHoc vs. Release.

De esta forma podemos otorgar a los probadores la capacidad de cambiar entre entornos de servidor en la misma aplicación.

Podría hacer esto con un #define pero pensé que podría preguntar si hay una forma más elegante de hacerlo detectando la configuración actual.

Respuesta

7

Puede establecer una definición personalizada en su configuración usando la configuración Preprocessor Macros en su proyecto o información de destino. Esto funciona igual que si tuviera #define 'd una variable en su fuente.

En su configuración de versión, configure GCC_PREPROCESSOR_DEFINITIONS ("Macros de preprocesador") en MYAPP_RELEASE=1. A continuación, puede utilizar este código para cambiar la funcionalidad en tiempo de compilación:

#ifdef MYAPP_RELEASE 
    NSString *title = @"Release Version"; 
#else 
    NSString *title = @"Beta Version"; 
#endif 
+0

Esto también es útil para habilitar/deshabilitar características al compilar para un destino de aplicación Lite utilizando el mismo proyecto que su versión completa. –

0

También podría tener una clave diferente para plist las configuraciones y luego tener su aplicación leer el archivo plist en tiempo de ejecución como ...

CFBundleRef mainBundle; 
CFDictionaryRef bundleInfoDict; 
mainBundle = CFBundleGetMainBundle(); 
bundleInfoDict = CFBundleGetInfoDictionary(mainBundle); 

if (bundleInfoDict != NULL) { 
    // check for your custom config key here 
} 
+0

Eso también funciona, pero generalmente no tiene una configuración de archivo Info.plist diferente para configuraciones AdHoc vs. Release. No creo que haya ninguna otra configuración aquí que deba cambiar. También es posible que la interfaz de Cocoa para el paquete/plist sea más fácil de usar: 'NSString * myKey = [[[NSBundle mainBundle] infoDictionary] objectForKey: @" myInfoPlistKeyName "];' – pix0r

Cuestiones relacionadas