Antes do Swift, eu definiria um conjunto de esquemas para builds alfa, beta e distribuição. Cada um desses esquemas teria um conjunto de macros definidas para bloquear determinados comportamentos no nível do projeto. O exemplo mais simples é a macro DEBUG = 1 definida por padrão para todos os projetos do Xcode no esquema padrão da construção Executar. Pode-se consultar #ifdef DEBUG ... e tomar decisões no código de acordo, compilando até mesmo códigos não necessários.
Parece que esse tipo de bloqueio de configuração não é tão fácil com o uso rápido, pois as macros não são suportadas. Alguém pode sugerir uma abordagem comparável, não me importo se o código for compilado, por si só. Eu gostaria de bloquear os recursos com base no esquema de compilação.
$(inherited)
é usado nas configurações de destino para herdar as configurações do projeto.$(inherited)
torna meu comentário irrelevante, obrigado!Ocorreu um problema ao não querer definir sinalizadores de compilador rápidos, porque não queríamos defini-los e mantê-los atualizados para diferentes destinos etc. Além disso, em nossa base de código mista, não queríamos lembrar para definir nossas bandeiras adequadamente o tempo todo para cada idioma.
Para o nosso, declaramos um arquivo no ObjC
PreProcessorMacros.h
Neles
PreProcessorMacros.m
Em seguida, no cabeçalho de ponte Objective-C
Agora, use isso na sua base de código Swift
Definitivamente, é uma solução alternativa, mas resolveu o nosso problema, então eu o publiquei aqui na esperança de que ele ajude. Não pretende sugerir que as respostas existentes são inválidas.
fonte
Solução mais rápida para o método Logans. Situado
-D DEBUG
noOther Swift Flags
deSwift Compiler - Custom Flags
seção em configurações de compilação de seu alvo.Em seguida, declare o seguinte método no escopo global:
Agora use-o como
fonte
Para mim, defina o item de depuração de " Condição de compilação ativa " como "DEBUG" funcionou.
Em seguida, usando a chave DEBGU, o trabalho em #IF DEBUG funciona no modo de depuração e #ELSE no modo de liberação:
Use simplesmente como segue:
fonte
Estou trabalhando em uma base de código de idioma misto onde o código obj-c usa uma macro para enviar mensagens de depuração para o console (e essa macro depende de nosso sinalizador de pré-processador de depuração). Eu queria poder chamar essa mesma macro no código swift ...
É um pouco irritante que eu não possa simplesmente chamar a macro diretamente no código swift, mas pelo menos agora só tenho um lugar no projeto para me preocupar em ativar / desativar meu sinalizador de depuração.
fonte