2013-04-06 34 views
7

Có cách nào để tìm ra Đề án được sử dụng tại thời gian chạy không?Tìm tên sơ đồ Xcode Build tại thời gian chạy

Có thể có cách tốt hơn để thực hiện việc này, tôi đang cố gắng đặt Môi trường truy cập (Sản xuất và phát triển) bằng cách sử dụng tên Lược đồ.

Hiện nay tôi sử dụng #define ENV @"PROD" trong App-Prefix.pch tập tin để làm điều này, nhưng có một cơ hội để bỏ lỡ này pkg khi gửi đến táo để xem xét :(

Trả lời

3

Khi chạy một ứng dụng trên mô phỏng hoặc trên thiết bị của bạn, DEBUG biến được thiết lập, cho phép bạn sử dụng nó từ mã của bạn:

#ifdef DEBUG 
    // Something 
#else 
    // Something else 
#endif 

bạn có thể thấy biến này từ cài đặt build của mục tiêu của bạn:

Ngay sau khi cấu hình Run được thiết lập trên Debug (sản phẩm -> Scheme -> Edit Scheme), biến này sẽ được thiết lập:

enter image description here

+0

ah, tôi không biết điều đó, thx cho phản hồi cực nhanh :) – user390687

+0

Vâng, thực hiện việc này bằng cách sử dụng ** Cấu hình xây dựng ** có khả năng tốt hơn so với suy ra nó thông qua Đề án, vì cấu hình xây dựng cũng ảnh hưởng đến rất nhiều xây dựng cài đặt. –

19

Tôi đã tìm kiếm xa và rộng cho một câu trả lời này bởi vì tôi thực sự không thích ý tưởng tạo ra các mục tiêu bổ sung cũng như các tập cấu hình phụ bổ sung. Cả hai tùy chọn này chỉ tạo ra một vấn đề đồng bộ hóa cấu hình lớn.

Vì vậy, sau khi hack Xcode cho một vài giờ, đây là những gì tôi đã đưa ra:

Bước 1: Thêm phím "SchemeName" để Info.plist của bạn với kiểu string.

Bước 2: Chỉnh sửa chương trình mặc định của bạn và trên Build -> Pre-hành động thêm một mới Run Script như sau:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE" 

Hãy chắc chắn và chọn một mục tiêu từ dưới "Cung cấp build cài đặt từ ".

Bước 3: Bây giờ trùng lặp rằng chương trình như nhiều lần như bạn muốn (Quản lý Đề án ... -> Chọn chương trình hiện có -> Nhấn vào biểu tượng bánh răng -> Duplicate) Ví dụ, bạn có thể tạo Phát triển, Staging , Sản xuất, Cửa hàng ứng dụng, v.v. Đừng quên nhấp vào "được chia sẻ" nếu bạn muốn các lược đồ này được thực hiện trong điều khiển phiên bản.

Bước 4: Trong đoạn code, bạn có thể lấy giá trị như thế này:

NSString *schemeName = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SchemeName"]; 

Bây giờ, các mã có thể cấu hình riêng của mình một cách chính xác khi chạy. Không có macro tiền xử lý khó chịu để xử lý và không có cấu hình giòn để duy trì.

+0

Điều này thật tuyệt vời và hoạt động! Tôi chỉ đặt khóa 'SchemeName' trong info.plist và khi tôi chạy giá trị xây dựng, giá trị được đặt. Đây là câu hỏi của tôi: $ SCHEME_NAME đến từ đâu?Tôi đã tìm kiếm các tài liệu cho các biến môi trường XCode (và internet) và không thể tìm thấy bất kỳ tham chiếu đến nó bất cứ điều gì. – shmim

+0

Trước khi tôi nhận được nó làm việc, tôi đã có lệnh Run Script echo ra tất cả các biến môi trường (Xcode đặt một bó trước khi thực hiện kịch bản). Tôi chỉ cần tìm kiếm thông qua nó cho đến khi tôi tìm thấy một nghi can có khả năng. –

+0

Và trên thực tế, nếu tôi nhớ chính xác, thì env var này chỉ được đặt trong các hành động Pre/Post liên quan đến lược đồ. Tôi không nghĩ rằng nó được thiết lập trong một Run Script bình thường trong giai đoạn xây dựng. –

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