Bevor ich schnell war, würde ich eine Reihe von Schemata für Alpha-, Beta- und Distributions-Builds definieren. Jedes dieser Schemata verfügt über eine Reihe von Makros, die definiert wurden, um bestimmte Verhaltensweisen auf Projektebene zu steuern. Das einfachste Beispiel ist das Makro DEBUG = 1, das standardmäßig für alle Xcode-Projekte im Standardschema für den Build-Build definiert ist. Man könnte #ifdef DEBUG abfragen ... und Entscheidungen im Code entsprechend treffen, sogar nicht benötigten Code kompilieren.
Es scheint, dass diese Art der Konfigurationssteuerung mit Swift nicht so einfach ist, da Makros nicht unterstützt werden. Kann jemand einen vergleichbaren Ansatz vorschlagen, ist es mir egal, ob der Code per se kompiliert wird. Ich möchte jedoch Features basierend auf dem Build-Schema testen.
$(inherited)
in den Zieleinstellungen verwendet wird, um Projekteinstellungen zu erben.$(inherited)
macht meinen Kommentar irrelevant, danke!Wir hatten ein Problem damit, dass wir keine schnellen Compiler-Flags setzen wollten, weil wir sie nicht setzen und für verschiedene Ziele usw. auf dem neuesten Stand halten wollten. Außerdem wollten wir uns in unserer gemischten Codebasis nicht daran erinnern um unsere Flaggen für jede Sprache jederzeit angemessen zu setzen.
Für uns haben wir eine Datei in ObjC deklariert
PreProcessorMacros.h
In ihnen
PreProcessorMacros.m
Dann in Ihrem Objective-C-Bridging-Header
Verwenden Sie dies jetzt in Ihrer Swift-Codebasis
Dies ist definitiv eine Problemumgehung, aber es hat unser Problem gelöst, also habe ich es hier veröffentlicht, in der Hoffnung, dass es helfen wird. Es soll nicht bedeuten, dass die vorhandenen Antworten ungültig sind.
quelle
Schnellere Lösung für die Logans-Methode. Stellen Sie
-D DEBUG
inOther Swift Flags
demSwift Compiler - Custom Flags
Abschnitt in Build - Einstellungen Ihres Ziels.Deklarieren Sie dann die folgende Methode im globalen Bereich:
Verwenden Sie es jetzt als
quelle
Setzen Sie für mich das Debug-Element " Active Compilation Condition " auf "DEBUG".
Dann funktioniert die Verwendung der DEBGU-Schlüsselarbeit in #IF DEBUG im Debug-Modus und #ELSE im Release-Modus:
Verwenden Sie einfach wie folgt:
quelle
Ich arbeite in einer gemischten Codebasis, in der der obj-c-Code ein Makro verwendet, um Debug-Nachrichten an die Konsole zu senden (und dieses Makro basiert auf unserem Debug-Präprozessor-Flag). Ich wollte in der Lage sein, dasselbe Makro im schnellen Code aufzurufen ...
Es ist leicht ärgerlich, dass ich das Makro nicht einfach direkt im schnellen Code aufrufen kann, aber zumindest habe ich jetzt nur einen Platz im Projekt, an dem ich mir Sorgen machen muss, ob ich mein Debug-Flag ein- oder ausschalten soll.
quelle