Em muitas situações, você realmente não precisa de compilação condicional ; você só precisa de um comportamento condicional que possa ser ligado e desligado. Para isso, você pode usar uma variável de ambiente. Isso tem a enorme vantagem de você não precisar recompilar.
Você pode definir a variável de ambiente e ativá-la ou desativá-la facilmente no editor de esquema:
Você pode recuperar a variável de ambiente com NSProcessInfo:
let dic = NSProcessInfo.processInfo().environment
if dic["TRIPLE"] != nil {
// ... do secret stuff here ...
}
Aqui está um exemplo da vida real. Meu aplicativo é executado apenas no dispositivo, porque usa a biblioteca de músicas, que não existe no Simulador. Como, então, tirar capturas de tela no Simulador para dispositivos que não possuo? Sem essas capturas de tela, não posso enviar para a AppStore.
Preciso de dados falsos e uma maneira diferente de processá-los . Eu tenho duas variáveis de ambiente: uma que, quando ativada, informa ao aplicativo para gerar os dados falsos a partir dos dados reais enquanto estiver sendo executado no meu dispositivo; o outro que, quando ligado, usa os dados falsos (e não a biblioteca de músicas que falta) durante a execução no Simulador. É fácil ativar ou desativar cada um desses modos especiais, graças às caixas de seleção de variáveis de ambiente no editor de esquema. E o bônus é que não posso usá-los acidentalmente na minha compilação na App Store, porque o arquivamento não possui variáveis de ambiente.