2009-12-01 7 views
13

Có cách nào tôi có thể biên dịch có điều kiện trong ứng dụng của mình dựa trên việc tôi có đang xây dựng cho trình mô phỏng hoặc thiết bị không? (Ứng dụng của tôi móc vào máy chủ bên ngoài: nếu tôi đang chạy trên thiết bị, tôi muốn kết nối với máy chủ cục bộ; nếu tôi đang chạy trên thiết bị, tôi muốn truy cập máy chủ sản xuất của mình.)Phát hiện trong dự án Xcode iPhone cho dù tôi đang xây dựng cho trình mô phỏng hay thiết bị?

I ' m tìm kiếm một số biến #ifdef mà tôi có thể phát hiện, hoặc thậm chí một cái gì đó trong thời gian chạy ... không quan trọng.

Cảm ơn.

Trả lời

18
#if !(TARGET_IPHONE_SIMULATOR) 

hoặc, cách khác,

#if (TARGET_OS_IPHONE) 

sẽ cho bạn biết nếu bạn đang chạy trên thiết bị. Để cho nó để làm việc, bạn phải

#include "TargetConditionals.h"

tập tin mà bạn có thể tìm here.

+0

Cảm ơn ... mà dường như để làm việc. Bất kỳ cách nào để tìm hiểu điều gì khác được xác định trong "TargetConditionals.h"? Tôi không thể tìm thấy tệp ở bất kỳ đâu ... –

+2

Chỉnh sửa ... ví dụ thứ hai của bạn (TARGET_OS_IPHONE) luôn thành công, miễn là, bạn đang phát triển iPhone. Ví dụ đầu tiên của bạn, TARGET_IPHONE_SIMULATOR, là những gì tôi đang tìm kiếm và chỉ thành công nếu bạn đang chạy trên trình mô phỏng (so với thiết bị.) –

+0

Được chỉnh sửa với liên kết đến tệp. – luvieere

1

Tôi đã tạo macro mà bạn có thể chỉ định hành động nào bạn muốn thực hiện bên trong dấu ngoặc đơn và các tác vụ này sẽ chỉ được thực hiện nếu thiết bị đang được mô phỏng.

#define SIM(x) if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound){x;} 

này được sử dụng như thế này:

SIM(NSLog(@"This will only be logged if the device is simulated"));