2009-07-10 42 views
5

Câu hỏi về các phương pháp hay nhất.Cấu hình tạo cấu hình iPhone Bật tính năng

Có cách nào để lập trình phát hiện xem ứng dụng có đang được biên dịch cho cấu hình AdHoc hay không và nếu có, hãy bật tính năng trong ứng dụng?

Ví dụ: tôi đang nghĩ đến việc bật chuyển đổi giữa môi trường beta và prod được cung cấp tùy thuộc vào việc ứng dụng có phải là cấu hình AdHoc và Release hay không.

Bằng cách này, chúng tôi có thể cung cấp cho người thử nghiệm khả năng chuyển đổi giữa các môi trường máy chủ trong cùng một ứng dụng.

Có thể thực hiện điều này với #define nhưng tôi nghĩ sẽ hỏi liệu có cách nào thanh lịch hơn để thực hiện điều đó bằng cách phát hiện cấu hình hiện tại hay không.

Trả lời

7

Bạn có thể đặt xác định tùy chỉnh trong cấu hình bằng cách sử dụng cài đặt Preprocessor Macros trong thông tin dự án hoặc mục tiêu của mình. Điều này hoạt động giống như khi bạn có #define 'd một biến trong nguồn của bạn.

Trong cấu hình phát hành của bạn, hãy đặt GCC_PREPROCESSOR_DEFINITIONS ("Preprocessor Macros") thành MYAPP_RELEASE=1. Sau đó bạn có thể sử dụng mã này để thay đổi chức năng tại thời gian biên dịch:

#ifdef MYAPP_RELEASE 
    NSString *title = @"Release Version"; 
#else 
    NSString *title = @"Beta Version"; 
#endif 
+0

Điều này cũng hữu ích khi bật/tắt tính năng khi biên dịch cho mục tiêu ứng dụng Lite sử dụng cùng một dự án làm phiên bản đầy đủ của bạn. –

0

Bạn cũng có thể có một chìa khóa plist khác nhau cho các cấu hình và sau đó đã ứng dụng của bạn đọc từ tập tin plist trong thời gian chạy như ...

CFBundleRef mainBundle; 
CFDictionaryRef bundleInfoDict; 
mainBundle = CFBundleGetMainBundle(); 
bundleInfoDict = CFBundleGetInfoDictionary(mainBundle); 

if (bundleInfoDict != NULL) { 
    // check for your custom config key here 
} 
+0

Điều đó cũng hoạt động, nhưng nói chung bạn không có thiết lập tệp Info.plist khác cho cấu hình AdHoc so với bản phát hành. Tôi không nghĩ có bất kỳ cài đặt nào khác ở đây mà bạn cần phải thay đổi. Bạn cũng có thể tìm thấy giao diện Cocoa cho gói/plist dễ sử dụng hơn: 'NSString * myKey = [[[[NSBundle mainBundle] infoDictionary] objectForKey: @" myInfoPlistKeyName "];' – pix0r

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