2013-04-06 15 views
7

Czy istnieje sposób sprawdzenia schematu używanego w czasie wykonywania?Znajdź nazwę schematu kompilacji Xcode w czasie wykonywania.

Być może jest lepszy sposób, aby to zrobić, próbuję ustawić Środowisko dostępu (Produkcja vs Rozwój) za pomocą nazwy schematu.

Obecnie używam #define ENV @"PROD" w App-Prefix.pch pliku to zrobić, ale jest szansa, aby przegap tego podczas wysyłania pkg do jabłkiem przeglądu :(

Odpowiedz

3

Uruchamiając aplikację na symulatorze lub na dysku urządzenia, DEBUG zmienna jest ustawiona, co pozwala na użycie go z kodem:

#ifdef DEBUG 
    // Something 
#else 
    // Something else 
#endif 

widać tę zmienną z ustawieniami budować swój podsystemu:

Jak tylko konfiguracja Run jest ustawiony na Debug (Produkt -> System -> Schemat Edit), zmienna ta zostanie ustawiona:

enter image description here

+0

ah, nie wiedziałem tego, thx za super szybką odpowiedź :) – user390687

+0

Tak, robienie tego przy użyciu ** Build Configuration ** jest prawdopodobnie lepsze niż wnioskowanie przez Schemat, ponieważ konfiguracja kompilacji wpływa również na wiele innych buduj ustawienia. –

19

Szukałem daleko za odpowiedź na to ponieważ naprawdę nie podoba mi się pomysł tworzenia dodatkowych Celów ani dodatkowych zestawów Konfiguracji. Obie te opcje powodują po prostu ogromny problem z synchronizacją konfiguracji.

Tak, po hacking Xcode na kilka godzin, to co wymyśliłem:

Krok 1: dodać klucz "SchemeName" do Info.plist z typu string.

Krok 2: Edycja schematu domyślnego i na produkcji -> Pre-actions dodać nowy skrypt uruchomić z następującymi:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE" 

Upewnij się i wybrać cel spod „zapewnić ustawienia budować od ".

Krok 3: Teraz powielać że schemat tyle razy, ile chcesz (Zarządzanie Schematy ... -> Wybierz istniejący schemat -> kliknij ikonę koła zębatego -> Duplikat) Na przykład, można utworzyć Rozwoju, Rusztowania , Produkcja, App Store itp. Nie zapomnij kliknąć "udostępniony", jeśli chcesz, aby te schematy były przenoszone w kontroli wersji.

Krok 4: W kodzie można pobrać wartość takiego:

NSString *schemeName = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SchemeName"]; 

Teraz, kod może skonfigurować się prawidłowo przy starcie. Żadnych nieprzyjemnych makr preprocesorów, z którymi nie można sobie poradzić i żadnych kłopotliwych bałaganów w konfiguracji.

+0

To jest świetne i działa! W pliku info.plist ustawiam tylko klucz "SchemeName", a po uruchomieniu kompilacji ustawiona jest wartość. Oto moje pytanie: skąd pochodzi SCHEME_NAME?Przeszukałem dokumentację dotyczącą zmiennych środowiskowych XCode (i Internetu) i nie mogę znaleźć żadnego odniesienia do niej. – shmim

+0

Zanim to zrobiłem, miałem polecenie Run Script wyświetlające wszystkie zmienne środowiskowe (Xcode ustawia grupę przed wykonaniem skryptu). Właśnie przeszukałem go, aż znalazłem podejrzanego. –

+0

Rzeczywiście, jeśli dobrze pamiętam, ten env var jest ustawiony tylko w akcji związanych z pre/post. Nie sądzę, że jest ustawiony w normalnym skrypcie Run w fazie kompilacji. –

Powiązane problemy