Avant Swift, je définirais un ensemble de schémas pour les versions alpha, bêta et de distribution. Chacun de ces schémas aurait un ensemble de macros qui ont été définies pour contrôler certains comportements au niveau du projet. L'exemple le plus simple est la macro DEBUG = 1 qui est définie par défaut pour tous les projets Xcode dans le schéma par défaut pour la génération Exécuter. On pourrait interroger #ifdef DEBUG ... et prendre des décisions dans le code en conséquence, même en compilant du code non nécessaire.
Il semble que ce type de gating configurationnel ne soit pas aussi simple avec swift, car les macros ne sont pas prises en charge. Quelqu'un peut-il suggérer une approche comparable, je m'en fiche si le code est compilé, en soi. Je voudrais cependant attribuer des fonctionnalités basées sur le schéma de construction.
$(inherited)
est utilisé dans les paramètres cibles pour hériter des paramètres du projet.$(inherited)
rend mon commentaire hors de propos, merci!Nous avons rencontré un problème avec le fait de ne pas vouloir définir d'indicateurs de compilateur rapides parce que nous ne voulions pas avoir à les définir et à les maintenir à jour pour différentes cibles, etc. De plus, dans notre base de code mixte, nous ne voulions pas nous souvenir pour définir nos drapeaux de manière appropriée tout le temps pour chaque langue.
Pour le nôtre, nous avons déclaré un fichier dans ObjC
PreProcessorMacros.h
Dans le .m
PreProcessorMacros.m
Ensuite, dans votre en-tête de pont Objective-C
Maintenant, utilisez ceci dans votre base de code Swift
C'est certainement une solution de contournement, mais cela a résolu notre problème, je l'ai donc publié ici dans l'espoir que cela vous aidera. Il ne vise pas à suggérer que les réponses existantes sont invalides.
la source
Solution plus rapide à la méthode Logans. Situé
-D DEBUG
dansOther Swift Flags
deSwift Compiler - Custom Flags
section dans les paramètres de construction de votre cible.Ensuite, déclarez la méthode suivante dans la portée globale:
Maintenant, utilisez-le comme
la source
Pour moi, définissez l'élément de débogage de « Condition de compilation active » sur «DEBUG» a fonctionné.
Ensuite, l'utilisation de la clé DEBGU fonctionne dans #IF DEBUG fonctionne en mode débogage et #ELSE en mode version:
Utilisez simplement comme suit:
la source
Je travaille dans une base de code de langage mixte où le code obj-c utilise une macro pour envoyer des messages de débogage à la console (et cette macro repose sur notre indicateur de préprocesseur de débogage). Je voulais pouvoir appeler cette même macro dans le code swift ...
C'est légèrement ennuyeux que je ne puisse pas appeler la macro directement dans le code swift, mais au moins maintenant, je n'ai qu'un seul endroit dans le projet pour m'inquiéter d'activer / désactiver mon indicateur de débogage.
la source