2014-04-25 18 views
6

Tôi đang chạy số xctests sử dụng xcodebuild của mình và cần chuyển vào một số environment variables. Trong ví dụ bên dưới ACCOUNT_IDHOST_URL.Truy cập các biến do người dùng xác định được chuyển từ từ dòng lệnh xcodebuild

tôi đã cố gắng đi qua trong các biến như cả hai biến môi trường và truy cập chúng từ kiểm tra sử dụng getenv ("ACCOUNT_ID") xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient -destination '%s' ACCOUNT_ID=%s HOST_URL=%s test"

Và đi qua chúng trong như user defaults và truy cập chúng bằng cách sử [[NSUserDefaults standardUserDefaults] valueForKey:@"HOST_URL"]; xcodebuild -project CalculatorTestClient.xcodeproj -scheme CalculatorTestClient -destination '%s' ACCOUNT_ID=%s HOST_URL=%s test"

cách tiếp cận Không làm việc cho tôi . Cách dễ nhất để chuyển biến do người dùng xác định từ dòng lệnh là gì?

+0

Dường như không dễ dàng. Có một cái nhìn ở đây: http://blog.manbolo.com/2013/05/17/passing-user-variable-to-xcodebuild – Opal

Trả lời

0

Cho đến nay tôi đã chỉ có thể để có được phương pháp này để làm việc:

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

và truy cập chúng thông qua:

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

Chỉ cần nhận thấy rằng điều này chỉ làm việc cho tôi khi nhắm mục tiêu OS X, không phải iOS. –

+0

doest làm việc cho tôi, iOS UITests –

+0

Vâng, nhận xét của tôi lưu ý rằng nó chỉ hoạt động đối với tôi khi nhắm mục tiêu OS X chứ không phải iOS. –

10

Tương tự như @ Paul trẻ tôi đã có thể có được điều này để làm việc, với một vài sửa đổi đối với Đề án. Đây là giải pháp của tôi:

Đối với Đề án trong Xcode (Xcode> Đề án của bạn> Sửa Scheme> Thử nghiệm> tab Arguments> Environment Variables):

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

Trong Mã (Swift 3):

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

Trên dòng lệnh:

$ 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

Tính năng này cũng chỉ hoạt động đối với OSX? Tôi sẽ đánh giá cao một giải pháp làm việc cho iOS. – cakl

+0

Giải pháp của tôi dành cho iOS. Đây là cách tôi vượt qua các biến để kiểm tra giao diện người dùng iOS của tôi – atgrubb

+0

Tôi có rất nhiều tình yêu dành cho bạn ngay bây giờ. Tôi mất một lúc để tìm ra điều này. Cảm ơn! Chính xác những gì tôi cần. – helkarli

0

những gì tôi đã làm cho trường hợp của tôi là tôi đã sử dụng lệnh xcodebuild build-for-testing và tạo tệp xctestrun sau đó sử dụng xcodebuild test-without-building để chạy thử nghiệm. trong trường hợp này, bạn có thể thay đổi tệp xctestrun có các biến môi trường trong phạm vi của nó trước khi chạy thử nghiệm của bạn.

vì vậy bạn cần chạy tập lệnh bằng cách sử dụng PlistBuddy để thay đổi các phím môi trường plist của bạn. ví dụ: để thêm một khóa:

/usr/libexec/PlistBuddy -c "add :APPNAME-TARGETNAME:EnvironmentVariables:KEYNAME string 'VALUE'" "(Path to XCTestRun file)" 
Các vấn đề liên quan