2009-12-01 68 views
13

有沒有什麼方法可以在我的應用程序中根據我是爲模擬器還是設備構建而有條件地編譯? (我的應用程序掛接到外部服務器:如果我在設備上運行,我想連接到本地主機;如果我正在設備上運行,我想要到我的生產服務器上。)在Xcode iPhone項目中檢測我是否在爲模擬器或設備構建?

I'我尋找一些#ifdef變量,我可以檢測,甚至在運行時......無所謂。

謝謝。

回答

18
#if !(TARGET_IPHONE_SIMULATOR) 

,或者

#if (TARGET_OS_IPHONE) 

會告訴你,如果你的設備上運行。爲了讓它工作,必須

#include "TargetConditionals.h"

文件,你可以找到here

+0

謝謝...這似乎工作。 任何方式來找出「TargetConditionals.h」中定義了什麼?我無法在任何地方找到該文件... – 2009-12-01 21:17:11

+2

正確...您的第二個示例(TARGET_OS_IPHONE)總是成功,當然,您正在進行iPhone開發。你的第一個例子TARGET_IPHONE_SIMULATOR就是我正在尋找的東西,只有在模擬器上運行(相對於設備)才能成功。 – 2009-12-01 21:42:39

+0

用鏈接指向文件進行編輯。 – luvieere 2009-12-01 22:51:13

1

我創建了,你可以指定你想要的動作來執行括號內,如果該設備正在模擬這些行動將只執行的宏。

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

這是使用這樣的:

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