2013-07-19 5 views
5

Mam aplikację ios, która wysyła żądania REST. Chcę automatycznie zmieniać punkty końcowe połączeń serwisowych w zależności od tego, czy wysyłam żądania RESTful do usługi WWW na numer a. serwer programistyczny b. serwer pomostowy c. serwer produkcyjnyXcode Objective C makra i ustawienia kompilacji, przełączanie dev i inscenizacja i produkcja - pełny przykład?

Na przykład

a. dev url: http://www.dev.camerakingphotos/getAllPhotos 
b. test url: http://www.test.camerakingphotos/getAllPhotos 
c. production url: http://www.camerkingphotos/getAllPhotos 
  1. Jak mogę powiedzieć XCode aby przełączyć adresy URL do mojego serwera produkcyjnego vs serwerze rozwoju bez wysiłku? Czy jest to ustawienie kompilacji, makro preprocesora, schemat lub nowy cel (myślę, że nowy cel nie jest tym, czego chcę). Idealnie XCode będzie wiedział, że teraz testuję wersję rozwojową mojej aplikacji, więc chcę, aby wszystkie adresy URL wskazywały serwer rozwoju. Chcę powiedzieć XCode, że jestem gotowy do przetestowania mojej aplikacji, aby wskazywała na produkcję, więc używaj adresów URL, które odpowiadają serwerowi produkcyjnemu.

  2. Jeśli zdefiniuję makro preprocesora, gdzie powinienem to zrobić? Mam plik APP_CONSTANTS.h, który jest jedynym miejscem przechowywania wszystkich moich adresów URL usług. Czy definiuję makro preprocesora w moim pliku APP_CONSTANTS.h lub w pliku Prefix.pch?

  3. Czy ktoś chciałby przeliterować szczegółowy przykład dla mnie?

Rozejrzałem się wokół stackoverflow, ale byłbym wdzięczny za to, że ktoś nakłada wszystkie części, jednoznacznie dla mnie, co nie zakłada zbyt dużej wiedzy. Przeglądałem przewodnik budowania XCode (większość), ale widziałem tylko drzewa, a nie las.

Dzięki!

+0

Będziesz musiał jasno zdefiniować "środowisko programistyczne" i inne. Co to znaczy? – borrrden

+0

Pytanie wyjaśnione. – user798719

Odpowiedz

7

Xcode ma (prawie) nie ma nic wspólnego z tym, jeśli chcesz wiedzieć, że kompilator wiedzieć, musisz to powiedzieć. Kompilator wie tylko, co mówisz. Też mam tę konfigurację. Używam makr preprocesora, aby przełączać się między nimi. Domyślnie Xcode definiuje flagę preprocesora DEBUG ustawioną podczas tworzenia kompilacji aplikacji. Nie jest zdefiniowany w schemacie Release. Jest to najprostszy sposób, aby przełączać się między dwoma serwerami:

.h plików

extern NSString *const MYServerURL; 

pliku .m

#ifdef DEBUG 
NSString *const MYServerURL = @"http://www.dev.camerakingphotos/getAllPhotos"; 
#else 
NSString *const MYServerURL = @"http://www.camerakingphotos/getAllPhotos"; 
#endif 

Zauważ, że nie miałem #define te. Ma to tę zaletę, że po zmianie pliku .m, tylko trzeba go zrekompilować (w przeciwieństwie do poprzedniego, który wymaga ponownego skompilowania każdego pliku zawierającego nagłówek). Te zmienne będą dostępne globalnie dla dowolnego pliku zawierającego nagłówek, w którym zdefiniowana jest zmienna. Jeśli potrzebujesz bardziej precyzyjnego sterowania, możesz zdefiniować własne elementy preprocesorów w pliku .pch i włączać je i wyłączać w razie potrzeby (poprzez komentowanie). Następnie użyj powyższego wzoru, a zamiast DEBUG użyj swoich przedmiotów (nie zapomnij jednak zmienić ich na odpowiednią wartość przed zwolnieniem).

+0

Dziękujemy! To zadziałało! Doceń to dużo. – user798719