Nie chcę utrzymywać dwóch zestawów kodu. Po prostu muszę ograniczyć niektóre funkcje w wersji Lite i dodać kilka reklam.Jak zbudować Lite i pełną wersję aplikacji na iPhone'a na podstawie jednego projektu xcode?
Jak to zrobić?
Nie chcę utrzymywać dwóch zestawów kodu. Po prostu muszę ograniczyć niektóre funkcje w wersji Lite i dodać kilka reklam.Jak zbudować Lite i pełną wersję aplikacji na iPhone'a na podstawie jednego projektu xcode?
Jak to zrobić?
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.
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.
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
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. –
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
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
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