código diferente / config no lançamento e depuração de construção (Obj-C)
-
05-07-2019 - |
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?
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