2009-09-10 14 views
5

Estoy escribiendo una aplicación Cocoa en Objective C que se está comunicando con un servicio web y quiero que se conecte a un sandbox en modo de depuración y al servicio web real en modo de lanzamiento. Todo lo que necesito es cambiar en la línea de código donde se crea una instancia de un objeto que contiene la configuración (con un mensaje de inicio diferente y diferentes parámetros).Diferente código/configuración en la versión y Depuración (Obj-C)

Entonces, ¿cómo cambiaría una línea de código para el modo Release o Debug?

Respuesta

7

se puede comprobar por #ifdef DEBUG, pero recomendaría que no lo hace.

Existen muchas diferencias entre las versiones de Debug y Release. Diferentes optimizaciones del compilador, diferentes conjuntos de símbolos, etc.

Invariablemente, se encontrará en una situación en la que desea ejecutar la compilación Release contra su entorno limitado para depurar ... y su compilación de depuración contra el servicio web de producción porque algunos clientes tienen un problema que solo se reproduce en el modo de lanzamiento.

Entonces, para eso, sugeriría un usuario predeterminado. Ver NSUserDefaults.

Tenga en cuenta que los valores predeterminados de los usuarios simples se pueden configurar desde la línea de comandos.

Por lo tanto, se podría hacer algo como:

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug 
+0

Técnica interesante, tendré que recordar eso. – pix0r

+1

¡Gracias por este consejo! Tu comando de terminal realmente no funcionó para mí. Descubrí que "por defecto escribe my.bundle.identifier SandboxModeFlag -bool YES" para que funcione bien para mí. – Christian

2

Primero, defina un símbolo de preprocesador que solo se establece en la configuración de compilación de depuración, según la pregunta 367368 - llámelo, por ejemplo, DEPURACIÓN. A continuación, puede hacer

#ifdef DEBUG 
    // Code that only compiles in debug configuration 
#else 
    // Code that compiles in other configurations (i.e. release) 
#endif 
8

Puede usar define-config específica para cambiar el código que se ejecuta. Lea acerca de cómo define a preprocessor symbol in Xcode primero. Luego, en su código, haga algo como esto:

#if DEBUG_MODE 
#define BACKEND_URL @"http://testing.myserver.com" 
#else 
#define BACKEND_URL @"http://live.myserver.com" 
#end 

NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]]; 
+0

Aunque prefería la solución de bbum, ahora entiendo cómo funciona esto y lo tendré en cuenta. Gracias. – Christian

Cuestiones relacionadas