我有这个来源(xcode 3.2.5):
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_IPHONE
在TARGET_OS_PHONE
拼错了几个地方。 (好的'复制/粘贴!)
仍然希望找到关于如何设置Apple定义的明确描述。
答案 0 :(得分:3)
使用TARGET_OS_IPHONE
(仅限!)来区分iOS和OSX。
#if TARGET_OS_IPHONE
// iOS
#else
// Mac OS X
#endif
在OSX和iOS上, TARGET_OS_MAC
将为1;它早于iOS,就TargetConditionals.h而言,iOS被认为是OSX的变体。
答案 1 :(得分: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.
因此,可以预期为iOS定义TARGET_OS_MAC
,例如TARGET_OS_IPHONE
。