Przed swiftem zdefiniowałbym zestaw schematów dla wersji alfa, beta i dystrybucji. Każdy z tych schematów miałby zestaw makr, które zostały zdefiniowane w celu bramkowania określonych zachowań na poziomie projektu. Najprostszym przykładem jest makro DEBUG = 1, które jest zdefiniowane domyślnie dla wszystkich projektów Xcode w domyślnym schemacie dla kompilacji Uruchom. Można zapytać #ifdef DEBUG ... i odpowiednio podjąć decyzje w kodzie, nawet kompilując niepotrzebny kod.
Wydaje się, że ten typ bramkowania konfiguracyjnego nie jest tak łatwy w użyciu, jak szybkie, ponieważ makra nie są obsługiwane. Czy ktoś może zaproponować podobne podejście, nie obchodzi mnie, czy kod jest kompilowany jako taki. Chciałbym jednak bramkować funkcje w oparciu o schemat kompilacji.
$(inherited)
jest używany w ustawieniach docelowych do dziedziczenia ustawień projektu.$(inherited)
sprawia , że mój komentarz jest nieistotny, dziękuję!Napotkaliśmy problem polegający na tym, że nie chcieliśmy ustawiać flag szybkiego kompilatora, ponieważ nie chcieliśmy ich ustawiać i aktualizować dla różnych celów itp. Ponadto w naszej mieszanej bazie kodów nie chcieliśmy pamiętać ustawiać nasze flagi odpowiednio przez cały czas dla każdego języka.
W naszym zadeklarowaliśmy plik w ObjC
PreProcessorMacros.h
W nich
PreProcessorMacros.m
Następnie w nagłówku pomostowym Objective-C
Teraz użyj tego w swojej bazie kodu Swift
Jest to zdecydowanie obejście, ale rozwiązało nasz problem, więc opublikowałem go tutaj w nadziei, że pomoże. Nie oznacza to, że istniejące odpowiedzi są nieważne.
źródło
Szybsze rozwiązanie metody Logansa. Ustaw
-D DEBUG
wOther Swift Flags
odSwift Compiler - Custom Flags
sekcji w ustawieniach kompilacji docelowego.Następnie zadeklaruj następującą metodę w zakresie globalnym:
Teraz użyj go jako
źródło
Dla mnie ustaw element debugowania „ Active Compilation Condition ” na „DEBUG” działał.
Następnie użycie klawisza DEBGU w #IF DEBUG działa w trybie debugowania, a #ELSE w trybie wydania:
Użyj po prostu w następujący sposób:
źródło
Pracuję w bazie kodu języka mieszanego, w którym kod obj-c używa makra do wysyłania komunikatów debugowania do konsoli (a to makro zależy od naszej flagi preprocesora debugowania). Chciałem móc wywołać to samo makro w szybkim kodzie ...
To trochę denerwujące, że nie mogę po prostu wywołać makra bezpośrednio w szybkim kodzie, ale przynajmniej teraz mam tylko jedno miejsce w projekcie, aby martwić się włączaniem / wyłączaniem flagi debugowania.
źródło