2010-10-19 41 views
23

Nếu tôi đã thêm cài đặt do người dùng xác định trong cấu hình xây dựng của mình, làm cách nào tôi có thể đọc cài đặt đó trong mã Objective-C của mình?Tôi làm cách nào để truy cập cài đặt Xcode do người dùng xác định?

Tôi có hai tệp trong dự án của tôi, debug.plistrelease.plist. Tôi muốn tệp MainApp.m của mình đọc một trong các tệp này dựa trên cấu hình xây dựng nào đang chạy. Tôi thiết lập cài đặt do người dùng xác định có tên là "tên tệp" trong cả cấu hình Gỡ lỗi và Phát hành để trỏ đến tệp thích hợp. Nhưng tôi không biết làm thế nào MainApp.m tập tin của tôi có thể đọc các biến tên tập tin từ cấu hình hiện tại đang chạy.

Trả lời

8

Mã của bạn không thể đọc cài đặt xây dựng tùy ý. Bạn cần sử dụng macro tiền xử lý.

CHỈNH SỬA: Ví dụ: trong cài đặt đích cho cấu hình Gỡ lỗi, bạn có thể thêm DEBUGGING=1 trong cài đặt dựng sẵn Macro tiền xử lý và không xác định DEBUGGING trong cấu hình Phát hành. Sau đó, trong mã nguồn của bạn, bạn có thể làm những việc như:

#if DEBUGGING 
    use this file 
#else 
    use the other one 
#endif 
+0

Cảm ơn, JWWalker, bạn có thể chỉ cho tôi cách xác định macro tiền xử lý riêng cho dự án xcode không? –

+0

OK, tôi đã thêm một ví dụ vào câu trả lời của mình. – JWWalker

+3

P.S. Có một cách để sử dụng cài đặt do người dùng xác định: Chọn "Mở rộng cài đặt xây dựng trong tệp Info.plist", sau đó bạn có thể sử dụng '$ MYSETTING' trong tệp Info.plist. – JWWalker

34

Đây là những gì tôi đã làm, tôi không chắc chắn 100% nếu điều này là những gì bạn đang sau:

  1. Đi vào build Cài đặt bảng điều khiển và chọn biểu tượng bánh răng ở phía dưới bên trái: thêm User-Defined Thiết
  2. Tạo người dùng định nghĩa thiết lập của bạn, ví dụ:

    MY_LANG -> en_us 
    
  3. Sau đó, trong bối cảnh các Macro của Preprocessor, bạn có thể tham khảo giá trị:

    LANGCODE="$(MY_LANG)" 
    

Bây giờ bạn có thể tham khảo LANGCODE trong tất cả các file nguồn của bạn, và nó sẽ là bất cứ điều gì bạn đã điền trong xây dựng thiết lập tùy chỉnh của bạn . Tôi nhận ra rằng có một mức độ gián đoạn ở đây, nhưng đó là cố ý trong trường hợp của tôi: dự án XCode của tôi chứa một loạt các mục tiêu/cấu hình khác nhau với macro tiền xử lý riêng của họ. Tôi không muốn phải đi sâu vào tất cả những thứ đó, chỉ để thay đổi mã ngôn ngữ. Trong thực tế, tôi xác định mã ngôn ngữ ở cấp độ dự án. Tôi cũng sử dụng MY_LANG trong một vài tập lệnh, do đó, chỉ macro tiền xử lý sẽ không hoạt động. Có thể có một cách thông minh hơn, nhưng điều này phù hợp với tôi.

+1

ok, tôi có thể làm theo hai bước đầu tiên, tuy nhiên tôi không thể tìm ra ý nghĩa của bạn bằng cài đặt Preprocessor Macro ở bước ba. Tôi đã thử thêm nó vào GCC_PREPROCESSOR_DEFINITIONS như được mô tả trong http://stackoverflow.com/questions/367368/how-to-define-a-preprocessor-symbol-in-xcode tuy nhiên nó không hoạt động –

+6

Một cách khác để làm điều này là sau bạn đã tạo cài đặt người dùng, chuyển đến tab Xây dựng giai đoạn và đối với tệp nguồn nơi cài đặt được thêm vào để đọc, hãy thêm: '-D'LANGCODE = @" $ (MY_LANG) "''. –

+0

Nếu bạn xác định macro cho ** chuỗi ** trong cài đặt xây dựng, đừng quên thoát khỏi các dấu ngoặc kép như thế này 'LANGCODE = @ \" $ (MY_LANG) \ "' – DanSkeel

6

Tôi đã thử đề xuất zmippie nhưng nó không hiệu quả đối với tôi.

tôi nhận nó làm việc với điều này:

${MY_LANG} 
5

Bạn có thể truy cập người dùng định nghĩa thiết lập tại thời gian chạy (như đề xuất trong một chú thích bởi @JWWalker) xây dựng của bạn

  1. Thêm một nhập vào tệp Info.plist của bạn và đặt nó vào Cài đặt xây dựng do người dùng xác định

    MySetting -> ${MYSETTING} 
    
  2. đọc giá trị của nó từ mã

    [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"]; 
    
0

Trong trường hợp bất cứ ai khác vẫn đang bị mắc kẹt tìm cách làm macro tiền xử lý, tìm kiếm của Apple LLVM - phần trong Cài đặt Build tiền xử lý. Theo đó, bạn sẽ thấy một phần được gọi là Preprocessor Macros.

Đây là nơi theo mặc định, Xcode chèn macro DEBUG = 1 cho cấu hình xây dựng gỡ lỗi.

Bạn có thể thêm của riêng bạn tại đây và cung cấp cho họ các giá trị khác nhau để gỡ lỗi, phát hành và mọi cấu hình xây dựng tùy chỉnh mà bạn có thể có.

Để thêm một, bấm đúp vào danh sách giá trị hiện tại cho cấu hình bạn muốn và nó sẽ hiển thị một trình chỉnh sửa nhỏ đẹp với một macro trên mỗi dòng. Chỉ cần thêm tên macro của riêng bạn và đặt cho nó một giá trị giống như cách thực hiện DEBUG.

Chúng có thể được kiểm tra trong giai đoạn xây dựng tiền xử lý bằng cách sử dụng #if, #ifdef, vv để cung cấp mã hoặc giá trị có điều kiện.

Hy vọng điều đó sẽ hữu ích.

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