2012-09-17 14 views
6

Szukając tego mogłem znaleźć informacje tylko dla innych języków. Chciałbym poznać najlepsze praktyki na piśmie statments warunkowe takie jak:Xcode - warunkowy tryb rozwoju lub produkcji

if (DEV_MODE){ 
    //do something 
}else{ 
    //do the real stuff 
} 

a następnie ustawiając dev_mode lub wyłączyć w jakimś globalnym pliku, więc mam tylko to zmienić, aby włączyć lub wyłączyć zamiast zmieniać kod w wielokrotności miejsca. Mam kilka pomysłów, ale szukam porady, jak najlepiej to zrobić.

+0

Czy chcesz ustawić "DEV_MODE" podczas kompilacji? A może chcesz zmienić 'DEV_MODE' w czasie wykonywania bez rekompilacji? –

Odpowiedz

14

Spróbuj tego:

#ifdef DEBUG 
    // do stuff 
#endif 

Prąd wersja Xcode automatycznie ustawia to makro w nowych projektach. Przejdź do swoich projektów Ustawienia budowy, aby się upewnić. Jeśli go tam nie ma trzeba go dodać siebie:

enter image description here

+0

Tak, moje ustawienia to odzwierciedlają. Więc nie muszę nic zmieniać? Zakładam, że kiedy używam schematu AppStore, DEBUG będzie wynosił 0 automatycznie. – soleil

0

W ustawieniach projektu znajduje się sekcja o nazwie "Makra preprocesora". W tej sekcji możesz dodać ciąg do swojej wersji debugowania, na przykład "DEV_MODE" lub cokolwiek chcesz. Następnie możesz spełnić warunki wymienione powyżej, a gdy twoja aplikacja zostanie zbudowana dla "wydania" lub innego ustawienia, które nie zawiera twojego makra, twoja kontrola powinna się nie udać.

1

Zmienne preprocesora są co chcesz, w twojej konfiguracji kompilacji zdefiniować zmienną (DEV_MODE na przykład), a następnie za pomocą czeków preprocesora jak:

#if DEV_MODE 
    //dev mode code 
#else 
    //non-dev mode code 
#endif 
+0

Lepiej używać 'DEBUG', domyślnie zdefiniowany/niezdefiniowany przez Xcode (oczywiście, że tak nie jest, używając innego IDE/a toolchain z linii poleceń). –

8

(. To pytanie jest niezwiązane z Xcode)

Powiedział, że zamiast zanieczyszczających kod z FI stylu C, można użyć dyrektyw preprocesora, aby odfiltrować tryb debugowania i zwolnienia. O ile mi wiadomo, powszechną praktyką jest definiowanie makra DEBUG na 1 w trybie testowym, a nie definiowanie go w trybie zwolnienia. (Również Xcode może to dla ciebie zdefiniować, widziałem to zachowanie, na którym się opierałem.) Powodem jest to, że użycie preprocesora jest bardziej czytelne, ponieważ nie dostaje się do wcięcia, jest lepiej oddzielone od kod wizualnie. Podsumowując, spróbuj

#ifdef DEBUG 
    // do debug stuff here 
#else 
    // do release stuff here 
#endif 

Jeden dodatkowy argument dla makr preprocesora jest, że można conditionalize globalnej przestrzeni nazw, których nie dało kodem C. I. e., Z makrami preprocesora, można napisać:

#ifdef DEBUG 
    int functionOne() 
    { 
    } 
#else 
    char *functionTwo(int a) 
    { 
    } 
#endif 
Nie można tego zrobić bez preprocesora.

+0

Dzięki za wyjaśnienie. – soleil

Powiązane problemy