2009-09-10 6 views
5

Tôi đang viết ứng dụng Cocoa trong Mục tiêu C đang giao tiếp với dịch vụ web và tôi muốn kết nối với hộp cát trong chế độ gỡ lỗi và dịch vụ web thực trong chế độ phát hành. Tất cả những gì tôi cần là thay đổi dòng mã nơi một đối tượng chứa cấu hình được khởi tạo (với một thông điệp init khác và các tham số khác nhau).Mã/cấu hình khác nhau trong Bản phát hành & Gỡ lỗi (Obj-C)

Vậy làm cách nào để trao đổi một dòng mã cho chế độ Phát hành hoặc Gỡ lỗi?

Trả lời

7

Bạn có thể kiểm tra #ifdef DEBUG, nhưng tôi khuyên bạn không nên làm điều đó.

Có rất nhiều sự khác biệt giữa bản dựng Gỡ lỗi và Bản phát hành. Tối ưu hóa trình biên dịch khác nhau, các bộ ký hiệu khác nhau, v.v ...

Lúc nào, bạn sẽ thấy mình trong tình huống mà bạn muốn chạy Bản dựng phát hành so với hộp cát của bạn cho mục đích gỡ lỗi .... và bản dựng gỡ lỗi của bạn chống lại webservice sản xuất vì một số khách hàng có vấn đề chỉ tái tạo ở chế độ Phát hành.

Vì vậy, vì lý do đó, tôi sẽ đề xuất một người dùng mặc định. Xem NSUserDefaults.

Lưu ý rằng mặc định người dùng đơn giản có thể được đặt từ dòng lệnh.

Vì vậy, bạn có thể làm điều gì đó như:

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug 
+0

Kỹ thuật thú vị, tôi sẽ phải nhớ điều đó. – pix0r

+1

Cảm ơn lời khuyên này! Lệnh terminal của bạn không thực sự làm việc cho tôi. Tôi tìm thấy "mặc định viết my.bundle.identifier SandboxModeFlag -bool YES" để làm việc tốt cho tôi. – Christian

2

Trước tiên, hãy xác định một biểu tượng tiền xử lý chỉ được đặt trong cấu hình xây dựng Gỡ lỗi của bạn, theo câu hỏi 367368 - gọi nó là, nói, XỬ LÝ. Sau đó, bạn có thể làm

#ifdef DEBUG 
    // Code that only compiles in debug configuration 
#else 
    // Code that compiles in other configurations (i.e. release) 
#endif 
8

Bạn có thể sử dụng định nghĩa cấu hình cụ thể để thay đổi mã đó là thực thi. Đọc về cách define a preprocessor symbol in Xcode trước tiên. Sau đó, trong mã của bạn, hãy làm như sau:

#if DEBUG_MODE 
#define BACKEND_URL @"http://testing.myserver.com" 
#else 
#define BACKEND_URL @"http://live.myserver.com" 
#end 

NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]]; 
+0

Mặc dù tôi thích giải pháp của bbum, bây giờ tôi hiểu cách hoạt động của nó và sẽ ghi nhớ điều đó. Cảm ơn. – Christian