2010-09-16 30 views
30

Tôi xác định biến đường dẫn trong cây nguồn Xcode được gọi là "MY_SRC_DIR". Tôi muốn lấy giá trị của biến môi trường này và đặt nó vào một NSString trong mã obj-c. Ví dụ,Cách tham chiếu biến môi trường bên trong mã Obj-C

-(NSString*) getSourceDir 

{ 

    return @"${MY_SRC_DIR}"; // not the right solution and this is the question 

} 

Trả lời

57

Từ http://rosettacode.org/wiki/Environment_variables#Objective-C:

[[NSProcessInfo processInfo] environment] trả về một NSDictionary của môi trường hiện hành.

Ví dụ:

[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"] 
+8

BUZZZ: Câu trả lời sai; phương thức này sẽ trả về các biến môi trường khi chạy. Câu hỏi đặt ra là truy cập một biến môi trường tồn tại ở thời gian xây dựng (Xcode). – geowar

+18

Có lẽ câu trả lời sai cho câu hỏi của OP, nhưng câu trả lời đúng cho tôi! Cảm ơn!! –

+0

Làm cách nào tôi có thể xem các giá trị của các biến đó từ Xcode? – vijayst

-4

Câu trả lời tốt nhất cho câu hỏi này là câu trả lời được chấp nhận về câu hỏi này.

Constants in Objective-C

Bạn sẽ nhận được số dặm nhất, và sẽ không cần bất kỳ phương pháp đặc biệt để có được những giá trị mà bạn đang tìm kiếm cho đến khi nào bạn nhập các tập tin vào bất cứ điều gì .h/file .m là sẽ tiêu thụ giá trị đã nói.

+0

+1 cho liên kết bạn đã đăng –

6

Cách duy nhất tôi đã tìm thấy để có được một biến môi trường thời gian xây dựng như là một chuỗi là để đặt nó trong một yếu tố từ điển như thế này:

<key>Product Name</key> 
<string>$PRODUCT_NAME</string> 

và sau đó lấy nó như thế này:

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary]; 
NSString* productName = infoDict[@"Product Name"]; 
NSLog(@"Product Name: %@", productName); 
+0

Đây là câu trả lời đúng.Nó sẽ là lý tưởng để tìm một cách để làm điều đó mà không có từ điển thông tin. Nhưng điều đó có khả thi không? –

+0

Điều này vẫn còn sử dụng plist, nhưng ít nhất bạn có thể thay đổi nó tại thời gian xây dựng. Xem http://stackoverflow.com/questions/15361202/add-date-to-xcode-xcconfig-file –

+0

Mẹo tiện dụng. Cho phép bạn sử dụng một chuỗi được định nghĩa trong một .xcconfig được xây dựng cấu hình cụ thể cả ở thời gian chạy cũng như trong giai đoạn xây dựng kịch bản/etc. –

11

đây là một cách khác để làm điều đó:

tập tin .xcconfig:

FIRST_PRESIDENT = '@"Washington, George"' 
GCC_PREPROCESSOR_DEFINITIONS = MACRO_FIRST_PRESIDENT=$(FIRST_PRESIDENT) 

mã C Mục tiêu:

#ifdef FIRST_PRESIDENT 
    NSLog(@"FIRST_PRESIDENT is defined"); 
#else 
    NSLog(@"FIRST_PRESIDENT is NOT defined"); 
#endif 
#ifdef MACRO_FIRST_PRESIDENT 
    NSLog(@"MACRO_FIRST_PRESIDENT is %@", MACRO_FIRST_PRESIDENT); 
#else 
    NSLog(@"MACRO_FIRST_PRESIDENT is undefined, sorry!"); 
#endif 

đầu ra điều khiển - Tôi đã tước ra thùng rác từ NSLog:

FIRST_PRESIDENT is NOT defined 
MACRO_FIRST_PRESIDENT is Washington, George 
21

Chỉ cần lộ var mong muốn vào Environment Variables danh sách triển khai Xcode của hiện tại của bạn Sơ đồ và bạn sẽ có thể truy xuất nó trong thời gian chạy như sau:

NSString *buildConfiguration = [[NSProcessInfo processInfo] environment][@"BUILD_CONFIGURATION"]; 

Nó cũng áp dụng cho ba nhanh dự án sed.

Adding Xcode Build Setting Var to Environment var

Hy vọng sẽ hữu ích !! :]

Các vấn đề liên quan