2014-04-25 8 views
6

Ich verwende meine xctests mit xcodebuild und muss einige environment variables übergeben. In dem Beispiel unten ACCOUNT_ID und HOST_URL.Zugriff auf benutzerdefinierte Variablen, die von der xcodebuild-Befehlszeile übergeben wurden

Ich habe versucht, in den Variablen sowohl als Umgebungsvariable vorbei und aus dem Test Zugriff mit getenv ("ACCOUNT_ID") xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient -destination '%s' ACCOUNT_ID=%s HOST_URL=%s test"

Und sie als user defaults vorbei und ihnen den Zugriff mit [[NSUserDefaults standardUserDefaults] valueForKey:@"HOST_URL"]; xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient -destination '%s' ACCOUNT_ID=%s HOST_URL=%s test"

Weder Ansatz für mich gearbeitet . Was ist der einfachste Weg, um benutzerdefinierte Variablen von der Kommandozeile zu übergeben?

+0

Es scheint nicht einfach zu sein. Schau mal hier: http://blog.manbolo.com/2013/05/17/passing-user-variable-to-xcodebuild – Opal

Antwort

0

Bisher habe ich nur in der Lage gewesen, diesen Ansatz zu arbeiten:

$ ACCOUNT_ID=foo HOST_URL=bar xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient clean test 

und zugegriffen sie über:

NSDictionary *environment = [[NSProcessInfo processInfo] environment]; 
NSString *accountID = [environment objectForKey:@"ACCOUNT_ID"]; 
NSString *hostUrl = [environment objectForKey:@"HOST_URL"]; 
+0

Habe gerade gemerkt, dass das nur für mich funktioniert, wenn ich auf OS X und nicht auf iOS ziele. –

+0

doest Arbeit für mich, iOS UITests –

+0

Ja, mein Kommentar stellt fest, dass es nur für mich funktioniert, wenn OS X, nicht iOS. –

10

Ähnlich @ Paul Junge konnte ich dies erhalten, arbeiten, mit ein paar Änderungen am Schema. Hier ist meine Lösung:

Für das Schema in Xcode (Xcode> Ihr Schema> Schema bearbeiten> Test> Argumente Tab> Umgebungsvariablen):

Name Value ACCOUNT_ID $(ACCOUNT_ID) HOST_URL $(HOST_URL)

In-Code (Swift 3):

let accountID = ProcessInfo.processInfo.environment["ACCOUNT_ID"]! 
let hostURL = ProcessInfo.processInfo.environment["HOST_URL"]! 

Auf der Kommandozeile:

$ xcodebuild -project YourProject.xcodeproj \ 
-scheme "Your Scheme" \ 
-sdk iphonesimulator \ 
-destination 'platform=iOS Simulator,name=iPhone 7,OS=10.2' \ 
-derivedDataPath './output' \ 
ACCOUNT_ID='An Account ID' \ 
HOST_URL='www.hosturl.com' \ 
test 
+0

Funktioniert das nur für OSX? Ich würde eine funktionierende Lösung für iOS schätzen. – cakl

+0

Meine Lösung ist für iOS. So gebe ich Variablen an meine iOS-UI-Tests weiter – atgrubb

+0

Ich habe jetzt so viel Liebe für dich. Es hat eine Weile gedauert, bis ich das gefunden hatte. Vielen Dank! Genau das, was ich brauchte. – helkarli

0

Was ich Für meinen Fall habe ich den xcodebuild build-for-testing Befehl verwendet und die xctestrun Datei erstellt, die dann xcodebuild test-without-building verwendet, um den Test auszuführen. In diesem Fall können Sie die Datei xctestrun ändern, die die Umgebungsvariablen in ihrem Plist enthält, bevor Sie den Test ausführen.

Also müssen Sie ein Skript ausführen, indem Sie PlistBuddy verwenden, um Ihre PLIST-Umgebungsschlüssel zu ändern. um zum Beispiel einen Schlüssel hinzuzufügen:

/usr/libexec/PlistBuddy -c "add :APPNAME-TARGETNAME:EnvironmentVariables:KEYNAME string 'VALUE'" "(Path to XCTestRun file)"