Pregunta

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 y parámetros diferentes).

Entonces, ¿cómo cambiaría una línea de código por el modo de Liberación o Depuración?

¿Fue útil?

Solución

Puedes verificar #ifdef DEBUG , pero te recomendaría que no lo hagas.

Hay muchas diferencias entre las versiones 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 de Release contra su sandbox para propósitos de depuración ... y su compilación de debug contra el servicio web de producción porque algún cliente tiene un problema que solo se reproduce en Modo de lanzamiento.

Por lo tanto, para eso, sugeriría un usuario predeterminado. Consulte NSUserDefaults .

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

Por lo tanto, podrías hacer algo como:

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

Otros consejos

Puedes usar las definiciones específicas de la configuración para cambiar el código que se ejecuta. Lea acerca de cómo definir primero un símbolo de preprocesador en Xcode . Luego, en tu código, haz 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]];

Primero, defina un símbolo de preprocesador que solo esté establecido en su configuración de compilación de Depuración, según la pregunta 367368 - llámalo, por ejemplo, DEBUG. Entonces puedes hacerlo

#ifdef DEBUG
  // Code that only compiles in debug configuration
#else
  // Code that compiles in other configurations (i.e. release)
#endif
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top