Aktualizacja dla Xcode 5 i iOS 7
Uwaga: w przypadku rozwiązania Xcode 7 / Swift 2.1 do usuwania instrukcji print () w kompilacji wydania, moją odpowiedź znajdziesz tutaj .
Tak, powinieneś usunąć wszelkie instrukcje NSLog z kodu wydania, ponieważ spowalnia to twój kod i nie ma żadnego zastosowania w wydanej wersji. Na szczęście w Xcode 5 (iOS 7) niezwykle proste jest usunięcie wszystkich instrukcji NSLog „automatycznie” w kompilacjach wydań. Więc dlaczego tego nie zrobić.
Najpierw 3 kroki do wykonania, a następnie wyjaśnienia
1) w swoim projekcie Xcode znajdź plik „yourProjectName-prefix.pch” (zwykle znajdziesz go w grupie „Support files”), w której znajduje się Twój plik main.m
2) dodaj te 3 wiersze na końcu pliku „.pch”:
#ifndef DEBUG
#define NSLog(...);
#endif
3) sprawdź różnicę między wersją do debugowania a wersją do wydania. Jednym ze sposobów jest skorzystanie z opcji „edytuj schemat” -> „uruchom nazwę aplikacji” -> w zakładce „informacje” wybierz za pomocą menu rozwijanego między debugowaniem a wydaniem. W wydanej wersji nie zobaczysz żadnych wyników NSLog w konsoli debugowania!
Jak to wszystko działa?
Przede wszystkim trzeba wiedzieć, że preprocesor jest stosunkowo „głupi” i po prostu działa jako „zamiennik tekstu” przed wywołaniem kompilatora. Zastępuje wszystko, co „# zdefiniujesz”, tym, co następuje po #define
instrukcji.
#define NSLog(...);
(...)
Oznacza „coś” między nawiasami (). Zwróć także uwagę ;
na koniec. Nie jest to absolutnie konieczne, ponieważ kompilator to zoptymalizuje, ale lubię to tam umieścić, ponieważ jest bardziej „poprawne”. Po naszym #define
nie ma „nic”, więc preprocesor zamieni go na „nic”, a więc po prostu wyrzuci całą linię, zaczynając od NSLog...
do i włączając ;
.
Zdefiniuj instrukcje można uczynić warunkowymi za pomocą #ifdef
(jeśli zdefiniowano) lub #ifndef
(jeśli nie zdefiniowano)
tutaj piszemy #ifndef DEBUG
, co oznacza „jeśli symbol DEBUG nie jest zdefiniowany”. #ifdef
Albo #ifndef
trzeba być „zamknięty” z#endif
Xcode 5 domyślnie definiuje dla nas symbol „DEBUG”, gdy tryb kompilacji to „DEBUG”. W „wersji” nie jest to zdefiniowane. możesz to sprawdzić w ustawieniach projektu, zakładka „Ustawienia kompilacji” -> przewiń w dół do sekcji „Apple LLVM 5.0 - Przetwarzanie wstępne” -> makra preprocesora. Zobaczysz, że symbol „DEBUG” nie jest zdefiniowany dla kompilacji wydań!
na koniec plik .pch jest tworzony automatycznie przez Xcode i automatycznie dołączany do każdego pliku źródłowego podczas kompilacji. To tak, jakbyś umieścił całość #define
w każdym z plików źródłowych.