2014-04-25 10 views
6

Sto eseguendo il mio xctests utilizzando xcodebuild e ho bisogno di passare alcuni environment variables. Nell'esempio seguente ACCOUNT_ID e HOST_URL.Accesso alle variabili definite dall'utente inoltrate dalla riga di comando xcodebuild

ho provato passando le variabili sia come variabile d'ambiente e di accesso dal test usando getenv ("ACCOUNT_ID") xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient -destination '%s' ACCOUNT_ID=%s HOST_URL=%s test"

E li passando come user defaults e accedervi utilizzando [[NSUserDefaults standardUserDefaults] valueForKey:@"HOST_URL"]; xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient -destination '%s' ACCOUNT_ID=%s HOST_URL=%s test"

Nessuno dei due approcci ha funzionato per me . Qual è il modo più semplice per passare variabili definite dall'utente dalla riga di comando?

+0

Sembra non essere facile. Dai un'occhiata qui: http://blog.manbolo.com/2013/05/17/passing-user-variable-to-xcodebuild – Opal

risposta

0

Finora sono stato solo in grado di ottenere questo approccio al lavoro:

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

e accessibili:

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

Ho appena notato che questo funziona solo per me quando esegui il targeting per OS X, non per iOS. –

+0

mi piace lavorare per me, iOS UITests –

+0

Sì, il mio commento rileva che ha funzionato solo per me durante il targeting di OS X, non di iOS. –

10

Simile a @ Paolo giovani sono stato in grado di ottenere questo a lavoro, con un paio di modifiche allo Schema. Ecco la mia soluzione:

Per il regime in Xcode (Xcode> vostro schema> Modifica schema> Test> scheda Argomenti> Variabili d'ambiente):

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"]! 

Sulla riga di comando:

$ 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

Funziona anche per OSX? Gradirei una soluzione funzionante per iOS. – cakl

+0

La mia soluzione è per iOS. Ecco come faccio a passare le variabili ai miei test dell'interfaccia utente iOS – atgrubb

+0

Ho così tanto amore per te adesso. Mi ci è voluto un po 'per trovare questo. Grazie! Esattamente quello di cui avevo bisogno. – helkarli

0

Quello che ho Per il mio caso, ho utilizzato il comando xcodebuild build-for-testing e ho creato il file xctestrun, quindi utilizzando xcodebuild test-without-building per eseguire il test. in questo caso è possibile modificare il file xctestrun che contiene le variabili di ambiente nel suo plist prima di eseguire il test.

quindi è necessario eseguire uno script utilizzando PlistBuddy per modificare le chiavi dell'ambiente Plist. ad esempio per aggiungere una chiave:

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