2012-03-30 16 views
4

我有這個源(Xcode的3.2.5):似乎無法條件編譯爲iPhone/Mac的

NSLog(@"IPHONE = %d, SIMULATOR = %d, MAC = %d", TARGET_OS_IPHONE, TARGET_IPHONE_SIMULATOR, TARGET_OS_MAC); 

我得到這樣的結果:

2012-03-30 13:50:06.777 MyApp[36810:207] IPHONE = 1, SIMULATOR = 1, MAC = 1 

難怪我#if陳述感到困惑!

什麼給?有任何想法嗎?

FWIW:在(拴)的iPod Touch我得到這樣的:IPHONE = 1, SIMULATOR = 0, MAC = 1

新增:嗯,我想通了,我原來的問題#if是由於拼寫錯誤TARGET_OS_IPHONETARGET_OS_PHONE在幾個地方。 (好醇'複製/粘貼!)

仍然希望找到蘋果定義應該如何設置的明確描述。

+0

我無法複製這個,你的目標是什麼? – 2012-03-30 19:23:10

+0

「目標設備系列:iPhone」 – 2012-03-30 19:28:54

回答

0

我可能在這裏是錯的,但我的假設是,TARGET_OS_MAC指定您正在爲Mac OS X(而不是,比如說,win32)構建。 iOS實際上是Mac OS X的一個版本(儘管它不是品牌/銷售的)。

要查看它們是如何定義的,請選擇一個構建目標並在xcode中單擊它們的定義。

在標題文件中,宏被定義爲這樣:

TARGET_OS_MAC   - Generate code will run under Mac OS 
TARGET_OS_WIN32   - Generate code will run under 32-bit Windows 
TARGET_OS_UNIX   - Generate code will run under some non Mac OS X unix 
TARGET_OS_EMBEDDED  - Generate code will run under an embedded OS variant 
          of TARGET_OS_MAC 
TARGET_OS_IPHONE  - Generate code will run under iPhone OS which 
          is a variant of TARGET_OS_MAC. 

所以,可以預期,被TARGET_OS_MAC爲iOS定義,以及TARGET_OS_IPHONE例如。

+0

單擊按鈕即可找到Mac定義。 – 2012-03-30 20:04:19

+0

單擊命令可以找到您在Xcode中選擇的方案和目標配置的定義。 – Krumelur 2012-03-31 19:13:13

+0

「應該」和「確實」是兩回事。尤其是使用Xcode。 – 2012-03-31 19:21:50

3

使用TARGET_OS_IPHONE(僅限!)區分iOS和OSX。

#if TARGET_OS_IPHONE 
// iOS 
#else 
// Mac OS X 
#endif 

TARGET_OS_MAC在OSX和iOS上均爲1;它早於iOS,並且就TargetConditionals.h而言,iOS被認爲是OSX的變體。