2013-03-06 20 views
6

Mój projekt iOS ma pięć schematów: rozwój lokalny, integracja, kontrola jakości, demonstracja i produkcja. Każdy schemat używa różnej konfiguracji do kontrolowania takich rzeczy, jak częstotliwość odpytywania sieci, punkty końcowe API, analizy i tak dalej.Xcode/iOS: testy jednostek, schematy i konfiguracje

Podobnie mamy pięć odpowiednich celów: rozwój lokalny, integracja, kontrola jakości, demonstracja i produkcja. Każdy cel ma kilka Ustawienia zdefiniowane przez użytkownika budować, które zawierają klucze API wartości numeryczne dla czasu itd

naszej aplikacji za Info.plist plik wykorzystuje zmienne aplikacji, takich jak ${SOME_ENDPOINT_URL} do remisu na odpowiedniego użytkownika zdefiniowane ustawienia budować.

Aby pobrać zmienne, zrobić coś jak następuje:

[[[NSBundle mainBundle] infoDictionary] valueForKey:@"Some Endpoint URL"] 

To by odpowiadać zdefiniowanej przez użytkownika budowy ustawienie, tak:

"Some Endpoint URL" = ${SOME_ENDPOINT_URL} 

jestem teraz patrząc na to, jak aby odpowiednio skonfigurować projekt w celu wykonania testów jednostkowych i logicznych.

Aby zbudować testy mające na celu sprawdzenie, czy środowiska są poprawnie skonfigurowane, nie jestem pewien, jaka jest najlepsza praktyka.

  • Czy można poprawnie zbudować pięć dodatkowych celów specyficznych dla testu dla każdego środowiska?
  • A może lepiej zastąpić ustawienie "Argumenty akcji uruchomienia" dla komponentu testowego dla każdego schematu i podać coś w rodzaju argumentu, aby określić, którego schematu szukamy?
  • Czy istnieją już odniesienia do konfigurowania testów jednostek i logiki dla projektów iOS z wieloma środowiskami? Złożoność tego projektu wydaje się przekraczać zakres większości dokumentacji.
+0

Jabłko utrzymuje zakaz podejmowania wstecznie kompatybilne zmiany całego systemu Cele/Schematy - Myślę, że powodem nie jesteś znalezienie Docs to, że Apple zamierza/spodziewa się, aby więcej z nich idzie do przodu, i ma nadzieję, że uniknie flaku, który otrzymają. Ktoś z Apple wydaje się szczególnie nienawidzić Celów, więc osobiście podchodziłbym do podejścia "wykorzystuj argumenty" - Cele mogą być niedokładne (ponownie :() – Adam

+3

Zamiast mieć tak wiele różnych celów, dlaczego nie mieć tylko jednego celu? i pięć konfiguracji? Zamiast debugowania i wydania miałbyś LocalDev, Integ, QA, Demo, Prod. Możesz wtedy stworzyć pięć schematów, które budują ten sam cel, ale z inną konfiguracją –

+0

@JacobLukas czy znasz dobry samouczek na to, co opisujesz Zawsze unikałem schematów, ale brzmi jak mogą być naprawdę przydatne – DogCoffee

Odpowiedz

1

Oto co robię.

Info.plist

  • Utwórz plik mistrz Info.plist
  • Napisz skrypt run (Shell Script) dla każdego programu w celu wygenerowania Info.plist specyficzne dla środowiska poprzez modyfikację ustawień w pana Info .plist (Użyj PlistBuddy -c)
  • Dodaj skrypt run zbudować faz (powyżej "skompilować źródła")

.h plików

  • Definiowanie ustawień konfiguracji w pliku .h (np. config.h) config.h

    #if defined (CONFIG_FILE) 
    #import CONFIG_FILE 
    #endif 
    
  • importu w kodzie

  • używać makr pre-processor dla każdego programu, aby wybrać cel .h plików.

    -DCONFIG_FILE=local-env-config.h 
    
Powiązane problemy