2011-01-12 7 views

Odpowiedz

25

Utwórz wiele celów.

Możesz zmieniać konfiguracje kompilacji, klikając prawym przyciskiem myszy cel i wybierając opcję Pobierz informacje. Stamtąd możesz zrobić takie rzeczy, jak zmienianie pliku, na który patrzy (np. Dodać "Lite" do nazwy i zmienić ikonę/obrazki ładowania) i ustawić flagi kompilatora, aby móc #ifdef w miejscach.

Jeśli istnieje wiele plików, które mają zastosowanie tylko w pełnej wersji, można kliknąć je prawym przyciskiem myszy i usunąć je z Lite celem utworzenia mniejszej aplikacji.

Eksperymentowałem z różnymi alternatywami, takimi jak wiele konfiguracji, i wracam do wielu celów. Zwykle mam co najmniej trzy zdefiniowane - Rozwój, Ad hoc i App Store, z których każdy ma swoje własne ustawienia.

+0

Jim - Kiedy tworzysz nowy cel, musisz skopiować wszystkie pliki lub tylko pliki, które NIE są częste? Na przykład mam nieco inny plik ekranowy (.xib) ... Zasadniczo chcę wyłączyć przycisk i dodać dodatkowy tekst do etykiety. Więc kiedy utworzę nowy cel, powinienem skopiować oryginał (.xib) i wprowadzić zmiany do niego w nowym celu? – milesmeow

+0

Jeśli zmiany są niewielkie, chciałbym dostarczyć makro preprocesora w ustawieniach kompilacji dla każdego celu, a następnie użyć '# ifdef', aby wprowadzić zmiany w kodzie. – Jim

+0

Jeśli istnieją większe rozbieżności, utworzyłbym katalog dla każdego celu i umieściłbym kopię stalówki w każdym folderze, włączając każdy z nich dla własnego celu. Po utworzeniu pakietu aplikacji Xcode ignoruje oryginalną strukturę folderów (domyślnie) i kopiuje pliki tego obiektu docelowego do płaskiej struktury katalogów. Ponieważ skopiuje tylko jeden z dwóch plików, otrzymasz poprawną końcówkę. – Jim

15

Dodaj dodatkowy cel do projektu Xcode, duplikując istniejący. Zdefiniować makro w nowy cel (w ramach "makr preprocesora" w ustawieniach kompilacji), coś jak "macroIsFreeVersion"

Teraz można to zrobić:

#ifdef macroIsFreeVersion 
    // code that will only execute in the free version here 
#endif 

a to:

#ifndef macroIsFreeVersion 
    // code for only the paid version goes here 
#endif 

Będziesz musiał wprowadzić dodatkowe zmiany dotyczące identyfikatora pakunku, profilu informacyjnego itd. Wszystkie rzeczy, które zrobiłeś, aby wprowadzić płatną wersję do sklepu.

+0

Witaj Williamie: Jestem w XCode4 (proszę również o zebranie mnie bc, to jest to pierwszy raz kiedy próbuję wykonać tę konfigurację multitarget i pracuję z flagami kompilatora). Mam "Kompilator Apple LLVM 2.0 - Preprocessing" -> "Makra preprocesora". Pod tym mam Debug, Release, MyProject. Aby podążać za twoim przykładem, po prostu wstawiłbym "macroIsFreeVersion" w tych trzech polach? – milesmeow

+0

Tak, chociaż ostatnio dowiedziałem się, że można to również zrobić za pomocą słownika informacji - metoda to [[NSBundle mainBundle] infoDictionary]. W zależności od konfiguracji może to nie być najlepsze rozwiązanie. –

Powiązane problemy