Pergunta

Eu estou escrevendo um aplicativo de cacau em Objective C que está se comunicando com um webservice e eu quero que ele se conectar a uma caixa de areia no modo de depuração e ao webservice real no modo de versão. Todos necessidade I é a mudança na linha de código onde um objeto que mantém a configuração é instanciado (com um init-mensagem diferente e diferentes parâmetros).

Então, como eu ia trocar uma linha de código para o modo Release ou Debug?

Foi útil?

Solução

Você pode verificar #ifdef DEBUG, mas eu recomendo que você não faça isso.

Existem muitas diferenças entre Debug e Release cria. Diferentes otimizações do compilador, diferentes conjuntos de símbolos, etc ...

Invariavelmente, você vai encontrar-se em uma situação onde você deseja executar o compilação de lançamento de encontro a sua caixa de areia para fins de depuração .... e sua compilação de depuração contra o webservice produção porque algum cliente tem um problema que só reproduz em modo de versão.

Assim, para isso, eu sugiro um padrão do usuário. Veja NSUserDefaults.

Note que padrões do usuário simples pode ser definido a partir da linha de comando.

Assim, você poderia fazer algo como:

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

Outras dicas

Você pode usar define específicas de configuração para alterar o código que é executado. Leia sobre como definir um símbolo de pré-processador no Xcode primeiro. Então, em seu código, fazer algo como isto:

#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]];

Primeiro, definir um símbolo de pré-processador que só é definido em sua configuração de compilação de depuração, conforme a pergunta 367368 - chamá-lo, digamos, de depuração. Então você pode fazer

#ifdef DEBUG
  // Code that only compiles in debug configuration
#else
  // Code that compiles in other configurations (i.e. release)
#endif
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top