2013-07-15 7 views
6

Wie mache ich den Test Host/Bundle Loader basierend auf dem aktuellen Schema dynamisch? Momentan befindet sich der Wert auf:Dynamischer "Testhost" oder Bundle Loader für iOS Unit Testing?

$(BUILT_PRODUCTS_DIR)/MyApp1.app/MyApp1 

Das Problem ist, ich habe 4 Anwendungen im Arbeitsbereich, und ich möchte die gleiche Einheit Test-Suite verwenden, für alle von ihnen. Wie ändere ich den "MyApp1" -Teil basierend auf dem aktuellen Schema dynamisch? Ist es eine Umgebungsvariable, die während des Builds erstellt wird? Ich habe versucht, es auf Dinge wie $ (PROJECT_NAME) zu setzen, aber diese scheinen den Namen der Testsuite zu bekommen.

+0

Ich bin mit dem gleichen Problem konfrontiert. Ich habe mehrere Ziele, in denen ich denselben Zieltest durchführen möchte. Offensichtlich ist das zu viel für Xcode. Meine Lösung bestand darin, ein Skript hinzuzufügen, um das XCodeProject zu ändern und dann die richtige App zu targetieren. –

Antwort

7

Um dies zu tun, müssen Sie eine Variable in den Build-Einstellungen haben - das scheint einfach, aber es ist nicht. Wenn Sie eine Umgebungsvariable über einen Pre- oder Post-Step im Anwendungs- oder Testschema setzen, scheint es nicht so zu sein, dass sie hier aufgenommen wird. Die Build-Einstellungen passieren schließlich vor dem Build. Dasselbe gilt für einen Präprozessor-Makro, obwohl dies mit xcodebuild und der Übergabe einer benutzerdefinierten Option funktioniert.

Die einzige Möglichkeit, dies zu tun, ist die Verwendung einer xcconfig-Datei. Erstellen Sie eines und wenden Sie es (zumindest) auf Ihr Testziel an. Der Inhalt soll wie folgt umfassen: THINGUNDERTEST=FooBar

Jetzt in Ihren Projekteinstellungen, ob in einer xcconfig oder der Projektdatei, setzt BUNDLER_LOADER zu: $(BUILT_PRODUCTS_DIR)/$(THINGUNDERTEST).app/$(THINGUNDERTEST)

, die funktioniert. Jetzt können Sie THINGUNDERTEST mit verschiedenen Mitteln ändern und erhalten zumindest etwas dynamisches Verhalten. Dies kann für Sie funktionieren oder nicht, je nach Ihren Bedürfnissen - aber es ist wahrscheinlich nur ein Ausgangspunkt.

+0

In meinem Fall benötigt mein Testziel eine Host-Anwendung. So liest 'BUNDLER_LOADER' den Wert von' TEST_HOST'. Also setze ich stattdessen '$ (BUILT_PRODUCTS_DIR)/$ (THINGUNDERTEST) .app/$ (THINGUNDERTEST)' auf 'TEST_HOST'. – Hlung

+0

Das funktioniert in der Tat. In meinem Fall habe ich den dynamisch aufgelösten Wert von '' THINGUNDERTEST''' als xctool-Befehlszeilenargument an die App gesendet. Gleiches sollte für xcodebuild funktionieren. Z.B. '' 'xcodebuild THINUNDERTEST = MyApp test''' –